2013-11-24 9 views
0

Итак, на моем сайте я использую THIS METHOD загрузки содержимого из внешнего html-файла с помощью AJAX. Он выглядит неплохо, и все, кроме того, что я пытаюсь сделать, это добавить переход страницы при изменении содержимого. Например, когда вы нажимаете «home», страница не автоматически изменяет текст в div, а скорее сдвигает текущую влево, выходит из экрана и в то же время сдвигает новое содержимое справа. И я не ищу решение «одной страницы» кстати. Я знаю, как сделать «замирания» эффект», но скольжение? Спасибо за любые советы и решения. И извините за noobish вопрос, как это ...Эффект перехода при загрузке новой страницы, AJAX

+1

вы можете предоставить свои коды? что вы сделали до сих пор? – thenewseattle

ответ

5

Использование AJAX XMLHttpRequest() не является хорошей идеей для новых разработчиков, особенно в наше время с тем, как каждый браузер реализует свои собственные XMLHttpRequest(). Я предлагаю использовать AJAX Framework JQuery в $.ajax() или это сокращенная функция $.get(). Но в вашем случае я бы порекомендовал .load() что примерно эквивалентно $.get().

Поскольку вы не включили свои коды (но вы должны в следующий раз!). Вот простой пример:

HTML:

<ul class="menu"> 
    <li><a href="home.html">Home</a></li> 
    <li><a href="about.html">About</a></li> 
    <li><a href="services.html">Services</a></li> 
</ul> 
<div id="contents"> 
<!-- Place the loaded contents here --> 
</div> 

CSS:

body {overflow-x:hidden;} 
.loaded_content_wrapper { 
    overflow:hidden; 
    margin-left:100%; 
    width:100%; 
    position:absolute; 
} 

JS:

function loadContent(href){ 
    /* Create the content wrapper and append it to div#contents 
     then load the contents to the wrapper 
    */ 
    $wrapper = $('<div>'); 
    $wrapper.addClass('loaded_content_wrapper').appendTo('#contents').load(href, function(){ 
     /* When the content is completely loaded 
      animate the new content from right to left 
      also the previous content slide to left and remove afterwards. 
     */ 
     $(this).animate({marginLeft:0}, 'slow').prev().animate({marginLeft:'-100%'}, 'slow', function(){ 
      $(this).remove(); //remove previous content once the animation is complete 
     }); 
    }) 
} 

$('a').click(function(e){ 
    e.preventDefault(); 
    var href = $(this).attr('href'); 
    loadContent(href) 
}) 
+0

Я тестировал только функцию load(), но не всю анимацию. Идея довольно проста: 1. на клике перейдите в href 2. создайте обертку и загрузите содержимое страницы href внутри 3. Скройте новое содержимое до крайнего правого затем один раз полностью загруженный движется влево. 4. Если есть предыдущий контент, переместите его также в крайнее левое положение, чтобы скрыть, как только анимация будет завершена, удалите его, чтобы он не переполнен: D –

+0

мой код: ' <тип скрипта = "текст/JavaScript"> функция loadPage (HREF) { вар XMLHTTP = новый XMLHttpRequest(); xmlhttp.open («GET», href, false); xmlhttp.send(); return xmlhttp.responseText; }

Home
' – Mary1517

+0

я вижу. Мой ответ также поместится в вашей разметке, функция 'loadContent()' будет обрабатывать вещи от загрузки новой страницы до анимации. Но вам может потребоваться изменить какой-либо селектор в функции. Я добавил решение в этом ** [jsfiddle] (http://jsfiddle.net/mark_s/Pcn88/2/) ** с некоторыми комментариями, которые вы должны прочитать. Он не будет показывать результат в jsfiddle, поскольку сайт не позволит использовать метод GET, но я тестировал его на своем локальном сервере, и он работает нормально. Ура! –

Смежные вопросы