2014-09-22 1 views
1

EDIT: Я удалил новую страницу в fadeIn, поскольку я думаю, что это путало людей. Я хочу, чтобы новая страница fadeIn.JQuery fadeOut полный callback не работает, но обратный вызов fadeIn равен

Я написал небольшой сайт, который работает как одна страница, выглядя как традиционный сайт. То, что я в основном пытался сделать, это иметь существенные элементы, т.е. nav, логотип, нижний колонтитул и т. д., которые должны быть привязаны к окну просмотра и иметь выбор опорных точек, к которым будет привязан навигатор. Все это прекрасно работает, но теперь, пытаясь оживить его, у меня возникают некоторые трудности.

Вот HTML разметка Я работаю с:

<div id="wrap"> 

    <ul id="nav"> 

     <li><a class="start" href="#link1">Page 1</a></li> 
     <li><a class="start" href="#link2">Page 2</a></li> 
     <li><a class="start" href="#link3">Page 3</a></li> 
     <li><a class="start" href="#link4">Page 4</a></li> 

    </ul> 

    <div class="contents"> 

    <div id="page" class="page1"> 

     <a class="finish" name="link1">page1</a> 

    </div> 

    <div id="page" class="page2"> 

     <a class="finish" name="link2">page2</a> 

    </div> 

    <div id="page" class="page3"> 

     <a class="finish" name="link3">page3</a> 

    </div> 

    <div id="page" class="page4"> 

     <a class="finish" name="link4">page4</a> 

    </div> 

    </div> 

</div> 

И CSS:

html, body { 
    margin: 0; 
    padding: 0; 
    overflow-x: hidden; 
} 

#nav { 
    position: fixed; 
    width: 100%; 
    margin-left: 80%; 
    z-index: 999; 
} 

li { 
    display: inline; 
} 

#wrap { 
    width: 400%; 
    height: 100%; 
} 

#page { 
    width: 25%; 
    height: 100%; 
    float: left; 
} 

.page1 { 
    background-color: blue; 
} 

.page2 { 
    background-color: red; 
} 

.page3 { 
    background-color: grey; 
} 

.page4 { 
    background-color: white; 
} 

.finish { 
    opacity: 0; 
    float: right; 
    width: 100%; 
    height: 100%; 
} 

Теперь это все отлично работает без Jquery, он просто идет прямо к связанной странице. JQuery здесь работает soley с контейнером .contents.

$(document).ready(function() { 

     //On page load, .contents will be hidden for a clean fadIn animation. WORKING 

     $('.contents').css('display', 'none'); 

     $('.contents').fadeIn(1000); 


     //Clicking any nav link will initiate animation. 

     $('.start').click(function(event) { 

     //Stops default action of going straight to anchor. 

     event.preventDefault(); 

     newLocation = this.href; 

     //newpage on fadeOut activate as seen in the url bar but not returning there on fadeIn.  

     $('.contents').fadeOut(1000, newpage); 

     //newpage on fadeIn is a debug to test of page will return to newlacation. Works but after animations finished.  

     $('.contents').fadeIn(1000); 

    }); 

     function newpage() { 

      window.location = newLocation; 

     } 

    }); 

Я не уверен, что еще попробовать. Единственное, что я могу придумать, это то, что полный обратный вызов прослушивается для fadeOut.

+0

Пожалуйста, объясните, что вы пытаетесь здесь сделать? Тест-код, кажется, путает вещи :) –

+0

Я пытаюсь перейти между страницами, затухая, перейдя на следующую страницу и затухая. –

ответ

2

Хорошо, поэтому я проработал, но спасибо за все, что вы посоветуете.

Вот неподвижная Jquery бит:

$('.contents').fadeOut(1000, function(){ 

    newpage(); 

    location.reload(); 

}); 

В основном страницы необходимо перезагрузить, чтобы загрузить новую часть страницы. Затем он снова запускает первую часть скрипта, которая отвечает за замирание на странице.

2

Поскольку javascript является асинхронным. Но вы не можете изменить местоположение страницы. то произойдет первое изменение;

измените свой код следующим образом. это должно сработать.

$('.contents').fadeOut(1000, function(){ 
newpage(); 
$('.contents').fadeIn(1000, newpage); }); 
+1

Исходный код предназначен только для тестирования.Очевидно, что изменить URL текущей страницы дважды (это то, что делает «новая страница») –

+0

Да и даже с добавлением функции() {newpage(); это не устраняет проблему. –

+0

вы ставите предупреждение на новую страницу, вы просто комментируете, что у вас есть, и попробуйте то, что происходит – vimalpt

0

добавления надлежащего времени между действиями позволит решить проблему

$('.contents').fadeOut(800, function(){ 
    newpage(); 
    $('.contents').fadeIn(100, newpage); }); 
}); 

в основном здесь то, что вы делаете вызов якоря и он будет вызывать relavent позиции прокрутки. используя прокрутку jquery, вы можете получить гладкие результаты

0

Это потому, что Javascript не ждет завершения FadeOut, поэтому он запускает как fadeOut, так и fadeIn одновременно.

вам нужно поставить FadeIn в функции обратного вызова FADEOUT, если вы хотите, чтобы последовательно называть их: (».) Содержимое

$ FADEOUT (1000, функция() {
[.. ваши функции. ..]
$ ('. Contents'). FadeIn (1000, новая страница);}
);

+0

Я понимаю это, но даже при том, что страница не перенаправляется на якорь, пока страница полностью исчезла. Он перенаправляется только после того, как начальная страница снова исчезла. –

+0

Но я не уверен, что понимаю. Вы хотите, чтобы ваша страница была fadeIn, когда вы ее открываете, тогда, когда вы нажимаете на якорь, вы хотите, чтобы он исчезал, а затем загрузите ссылку привязки, а затем fadeIn? Зачем вам нужен второй fadeIn? window.location перезагрузит вашу функцию jquery document.ready(). Итак, вам нужно только убедиться, что все страницы имеют один и тот же сценарий jquery, и просто избавиться от второго fadeIn и использовать window.location как обратный вызов fadeOut(). – 2014-09-22 12:03:01

+0

Сайт представляет собой одну страницу, поэтому, когда якорь щелкнул он идет к точке привязки на той же странице. То, что я пытаюсь сделать, вместо того, чтобы связь между точками привязки внезапно, я хочу оживить ее с помощью fadeOut fadeIn. Вы правы, если бы я использовал несколько страниц, тогда этот скрипт работал бы. –

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

  • Нет связанных вопросов^_^