Вот обновленный скрипку, затрагивающим несколько вопросов от комментариев.
Во-первых, вот скрипку ссылка: http://jsfiddle.net/dLbbntwz/
Одна из вещей, которые я хотел сделать, было убирать код и уменьшить дублирование в отдельных обработчиков событий up/down
из ранее. Вместо этого у меня есть одна функция _scroller
, которая затем передает 1/-1
в фактическую логику _scroll
.
Кроме того, была добавлена демонстрация логики колеса мыши. Так что теперь он синхронизируется!
Было, как вы упомянули, уродливой ошибкой, если бы вы нажали вниз, а затем переместили курсор с кнопок. Это связано с тем, что интервал не очищается. Я упомянул в другом комментарии, что вы можете установить флаг и проверить на уровне документа (позволяя пользователю перемещать курсор с кнопок - что кажется более «правильным» для MouseEvents
). Я обновил скрипт, чтобы использовать эту логику. Чувствует себя намного лучше?
Кроме того, была небольшая проблема с percentualOffset
. Хотя он правильно рассчитал коэффициент, он не учитывал высоту полосы прокрутки (заставляя кнопку прокрутки идти дальше бара). Я обновил это, так что это более точно.
Была также небольшая проблема с логикой для изменения размера кнопки. Если высота документа больше, чем высота прокрутки документа (без полосы прокрутки), все ломается. Итак, эта логика также была очищена.
Вы упомянули, что хотите 10px всегда (для фонового изображения) - я добавил прописку, чтобы обратиться к этому (что я рекомендую). Это облегчает логику при вычислении смещения для кнопки.
Надеюсь, это поможет! Еще одна область, которую я вижу, вы можете исследовать, это возможность щелкнуть и перетащить кнопку прокрутки, чтобы прокрутить фактическую страницу - это было бы пятно!
Эксперимент: http://jsfiddle.net/vinicius5581/2y63xnxa/5/ –
Вы не хотите использовать css для этого? Просто javascript? добавьте 'overflow-y: scroll' в стиль css div, который вы хотите прокрутить. Adn не забывайте атрибут height. – andrex
@andrex Считаете ли вы, что 'overflow-y: scroll'can make' # sidescroll' работает? посмотрите на скрипку. –