Плавная прокрутка к URL-адресу по событию клика с использованием функции

API royalslider имеет функцию rsSlideClick, которая может запускаться по событию.

Это выглядит так:

    var slider = $('#royalSliderStart').data('royalSlider');
    slider.ev.on('rsSlideClick', function() {

Дополнительная функция для использования плавной прокрутки якорных ссылок в списке выглядит следующим образом:

    $('ul.nav > a').bind('click',function(event){ 
              var $anchor = $(this); 
    $('html, body').stop().animate({ 
            scrollTop: $($anchor.attr('href')).offset().top 
            }, 1500); 
                event.preventDefault(); 
            }); 

Я ищу решения для использования функции плавной прокрутки с функцией rsSlideClick, желательно без ссылок на якорные ссылки.

В качестве примера решения пользователь нажимает на заданный слайд, и он плавно прокручивается вниз в другую область страницы (возможно, по идентификатору).

Решения?


Обновление 1:

HTML

<div class="container"> 
<ul class"nav"> 
<div class="royalSlider" id="royalSliderStart"> 
    <li class=”slide” target=”1”><slide #1></li> 
    <li class=”slide” target=”2”><slide #2></li> 
    <li class=”slide” target=”3”><slide #3></li> 
    <li class=”slide” target=”4”><slide #4></li> 
    <li class=”slide” target=”5”><slide #5></li> 
    <li class=”slide” target=”6”><slide #6></li> 
    <li class=”slide” target=”7”><slide #7></li> 
</div>
</ul> 
</div>

СЦЕНАРИЙ (НЕ РАБОТАЕТ ДОЛЖНЫМ ОБРАЗОМ. ТРЕБУЕТСЯ ПРОВЕРКА.)

var slider = $('#royalSliderStart').data('royalSlider');
    slider.ev.on('rsSlideClick', function() {
            $('.slide').on('click',function(event){ 
                var el = $(this); 
                $('html, body').stop().animate({ 
                    scrollTop: $(el.attr('target')).offset().top 
                }, 1500); 
                event.preventDefault(); 
        }); 
    }); 
});

person Ocean Circle    schedule 20.07.2013    source источник
comment
Вопрос обновлен с исправленными фрагментами кода (обновление 1).   -  person Ocean Circle    schedule 21.07.2013


Ответы (1)


Обновлено:

$('.slide').on('click', function(event) { 
    var el = $(this);
    $('html, body').stop().animate({
        scrollTop: $(el.attr('target')).offset().top 
    }, 1500);
    event.preventDefault();
});

HTML

<ul class="nav">
    <li class="slide" target="#slide-1">Slide 1</li> 
    <li class="slide" target="#slide-2">Slide 2</li> 
    <li class="slide" target="#slide-3">Slide 3</li>
</ul> 
<div class="content" id="slide-1">Slide 1 content</div>
<div class="content" id="slide-2">Slide 2 content</div>
<div class="content" id="slide-3">Slide 3 content</div>

Демо jsFiddle

Поскольку royalSlider удаляет html-код и добавляет слайды, приведенное выше не будет работать.

*Обновлен код для royalSlider

HTML

<div class="royalSlider rsDefault">
    <img src="http://dimsemenov.com/plugins/royal-slider/img/previews/home/visible-nearby.jpg">
    <img src="http://dimsemenov.com/plugins/royal-slider/img/previews/home/animated-blocks.jpg">
    <img src="http://dimsemenov.com/plugins/royal-slider/img/previews/home/fullwidth.jpg">
</div>
<div class="content" id="slide-1">Slide 1 content</div>
<div class="content" id="slide-2">Slide 2 content</div>
<div class="content" id="slide-3">Slide 3 content</div>

JS

$(".royalSlider").royalSlider({});
var slider = $(".royalSlider").data('royalSlider');
slider.ev.on('rsSlideClick', function() {
    $('html, body').stop().animate({
        scrollTop: $('#slide-' + slider.currSlideId).offset().top
    }, 1500);
});

jsFiddle для royalSlider

person Manoj Yadav    schedule 20.07.2013
comment
Не могли бы вы объяснить #slideID, так как у меня более 20 слайдов. - person Ocean Circle; 20.07.2013
comment
Затем добавьте класс slide ко всем из них и выберите его как атрибут, затем используйте его как селектор, ответ обновлен - person Manoj Yadav; 20.07.2013
comment
Не могли бы вы просмотреть обновление, которое я разместил, потому что оно все еще не работает. Обновление содержит фрагменты для лучшего понимания. - person Ocean Circle; 21.07.2013
comment
Manoj, ваш код идеален, но проблема, я думаю, в том, как функция rsClickSlide пытается использовать функцию прокрутки. Он не будет инициализирован. Вот этот код: var slider = $('#royalSliderStart').data('royalSlider'); slider.ev.on('rsSlideClick', функция() { - person Ocean Circle; 21.07.2013
comment
Добавьте приведенный выше код JS в конец, а не в slider.ev.on('rsSlideClick', function() { });, затем попробуйте - person Manoj Yadav; 21.07.2013
comment
Запрос разъяснений - person Ocean Circle; 21.07.2013
comment
Возможно, нужно сделать общедоступную функцию, а затем вызвать ее с помощью rsSlideClick? - person Ocean Circle; 21.07.2013
comment
Это очень хороший Манодж. Я пробую это сейчас. Скоро отпишусь с результатами. - person Ocean Circle; 21.07.2013
comment
Идеальное решение. Это ответ. Маной Ядав — хороший коммуникатор, понимает требования и исключительно хорошо работает в сложных условиях. Например, имея только ограниченные фрагменты кода, он смог тщательно исследовать, проанализировать и решить сложную проблему, и сделал это точно. Manoj Yadav настоятельно рекомендуется для любой работы с PHP, Magento или jQuery. - person Ocean Circle; 21.07.2013