Parallax/Steller.js и путевые точки Jquery

Я играю со Stellar.js и использовал демонстрацию, найденную здесь: http://webdesign.tutsplus.com/tutorials/complete-websites/create-a-parallax-scrolling-website-using-stellar.-js/

Я столкнулся с той же проблемой, что и на демонстрационной странице: когда страница загружается впервые, навигация (слайд 1) не активна. Он становится активным только после того, как вы начнете прокручивать вниз, а затем, когда вы вернетесь к слайду 1, он останется активным.

Это проблема, обнаруженная в FireFox и IE8 (нет IE9 для тестирования).

Я уверен, что это проблема с путевой точкой, а не активация при загрузке страницы. Как я могу исправить это, чтобы «Слайд 1» в навигации переходил в состояние активного класса?

Вот код JS из демо:

jQuery(document).ready(function ($) {


//initialise Stellar.js
$(window).stellar(
    {
    // Set scrolling to be in either one or both directions
    horizontalScrolling: true,
    verticalScrolling: true,    
    // Refreshes parallax content on window load and resize
    responsive: true,   



    }
    );

//Cache some variables
var links = $('.navigation').find('li');
slide = $('.slide');
button = $('.button');
mywindow = $(window);
htmlbody = $('html,body');



//Setup waypoints plugin
slide.waypoint(function (event, direction) {

    //cache the variable of the data-slide attribute associated with each slide
    dataslide = $(this).attr('data-slide');


    //If the user scrolls up change the navigation link that has the same data-slide attribute as the slide to active and 
    //remove the active class from the previous navigation link 
    if (direction === 'down') {
        $('.navigation li[data-slide="' + dataslide + '"]').addClass('active').prev().removeClass('active');
    }
    // else If the user scrolls down change the navigation link that has the same data-slide attribute as the slide to active and 
    //remove the active class from the next navigation link 
    else {
        $('.navigation li[data-slide="' + dataslide + '"]').addClass('active').next().removeClass('active');
    }

});


//waypoints doesnt detect the first slide when user scrolls back up to the top so we add this little bit of code, that removes the class 
//from navigation link slide 2 and adds it to navigation link slide 1. 
mywindow.scroll(function () {
    if (mywindow.scrollTop() == 0) {
        $('.navigation li[data-slide="1"]').addClass('active');
        $('.navigation li[data-slide="2"]').removeClass('active');
    }
});

//Create a function that will be passed a slide number and then will scroll to that slide using jquerys animate. The Jquery
//easing plugin is also used, so we passed in the easing method of 'easeInOutQuint' which is available throught the plugin.
function goToByScroll(dataslide) {
    htmlbody.animate({
        scrollTop: $('.slide[data-slide="' + dataslide + '"]').offset().top
    }, 2000, 'easeInOutQuint');
}



//When the user clicks on the navigation links, get the data-slide attribute value of the link and pass that variable to the goToByScroll function
links.click(function (e) {
    e.preventDefault();
    dataslide = $(this).attr('data-slide');
    goToByScroll(dataslide);
});

//When the user clicks on the button, get the get the data-slide attribute value of the button and pass that variable to the goToByScroll function
button.click(function (e) {
    e.preventDefault();
    dataslide = $(this).attr('data-slide');
    goToByScroll(dataslide);

});

});

любая помощь очень ценится.


person Keoki    schedule 24.04.2013    source источник


Ответы (2)


Вам следует взглянуть на функции, доступные с помощью плагина jQuery Waypoints.

Во-первых, попробуйте немного изменить настройку смещения плагина путевых точек (http://imakewebthings.com/jquery-waypoints/#doc-disable). Это приведет к срабатыванию путевой точки в другой точке страницы, так что, даже если вы находитесь в верхней части экрана, сработает первая путевая точка.

//Setup waypoints plugin
slide.waypoint(function (event, direction) {

dataslide = $(this).attr('data-slide');

if (direction === 'down') {
    $('.navigation li[data-slide="' + dataslide + '"]').addClass('active').prev().removeClass('active');
}    
else {
    $('.navigation li[data-slide="' + dataslide + '"]').addClass('active').next().removeClass('active');
}
}, { offset:50 }); // The waypoint is triggered when the element is 50px from the top of the viewport.

Или вы можете просто добавить «активный» класс CSS к первому элементу, который затем будет изменен при прокрутке.

Надеюсь, это поможет тебе.

person John Mattucci    schedule 25.04.2013
comment
Спасибо, переключение стилей действительно сработало лучше, чем попытки заставить JS работать в FireFox и IE 8. - person Keoki; 26.04.2013

Вы также можете просто добавить класс в html, поскольку скрипт все равно удаляет класс, когда вы прокручиваете от первого элемента.

person SuperKim    schedule 07.01.2014