2013-08-08 2 views
0

У меня есть элемент div внутри, что у меня есть список элементов (ol). Я использую drag and drop, используя jquery nestable. Пожалуйста, посмотрите здесь (How to scroll the window automatically when mouse moves bottom of the page using jquery).Как сделать скрипт прокрутки эффективно?

Я использовал для получения видимого <li> в текущем состоянии, используя view-port (плагин - http://www.appelsiini.net/projects/viewport).

Я использовал приведенный ниже сценарий. Я не мог прокручивать страницу более эффективно и скрипт не работает в FF (прокрутка не работает).

if ($('.dd-dragel').length > 0) { 
    var totalVisibleLi = $('#ol_id li:visible').length; 
    var liInViewPort = $('#ol_id li:in-viewport').length; 
    var closestLi = $(this.placeEl).prev('li'); 
    var items = $('#ol_id li:in-viewport'); 
    var indexOfClosestLi = items.index(closestLi); 

    if (indexOfClosestLi >= (liInViewPort - 3) && (e.pageY < $('#div_id').height())) { 

    $('body').animate({ 
     scrollTop: $(window).scrollTop() + 200 
    }, 1); 
    } 

    if (indexOfClosestLi <= 3) { 
    $('body').animate({ 
     scrollTop: $(window).scrollTop() - 200 
    }, 1); 

    } 
} 

Что мне здесь не хватает?

+2

Во-первых, для FF вам нужно: '$ ('body, html'). Animate ({...})'. Я просто проверяю ссылку, которую вы разместили, и ответ использует ее: '$ ('html, body')' Итак, в чем ваша проблема? Не могли бы вы начать с использования кода, который пытался помочь вам опубликовать ?! –

+0

Прокрутка работает, но она негладна, как ожидалось. прокрутка вверх ведет себя неожиданно – Achaius

+0

Мой комментарий должен был ответить на ваше утверждение: << и скрипт не работает в FF >> Так что если он работает на FF, не публикуйте это ... BTW, для плавной прокрутки я предлагаю используйте вместо этого переход CSS3, но он немного сложнее и не поддерживается в старых браузерах. –

ответ

0

Отредактировано код. Теперь прокрутка также работает в FF

if ($('.dd-dragel').length > 0) { 
    var totalVisibleLi = $('#ol_id li:visible').length; 
    var liInViewPort = $('#ol_id li:in-viewport').length; 
    var closestLi = $(this.placeEl).prev('li'); 
    var items = $('#ol_id li:in-viewport'); 
    var indexOfClosestLi = items.index(closestLi); 

    if (indexOfClosestLi >= (liInViewPort - 3) && (e.pageY < $('#div_id').height())) { 

    $('html,body').animate({ 
     scrollTop: $(window).scrollTop() + 200 
    }, 400); 
    } 

    if (indexOfClosestLi <= 3) { 
    $('html,body').animate({ 
     scrollTop: $(window).scrollTop() - 200 
    }, 400); 

    } 
} 
+0

после смены селектора $ ('html, body') он работает в FF. Но это не гладкий свиток. – Achaius

+0

просто добавьте скорость 400 вместо 1 –

+0

Добавлено в мой ответ. –