У меня есть этот удивительный код, который при событии "mousewheel" плавно прокручивает страницу с интервалами, определяемыми элементами <span>
.Он работает именно так, как я хочу:
https://codepen.io/Wcomp/pen/vbrqLJ?editors=1100
Однако, чего я также хотел бы добиться, так это чтобы полоса прокрутки перетаскивалась к ближайшему элементу span на mouseup, еслипользователь должен был щелкнуть и перетащить полосу прокрутки вместо того, чтобы использовать колесо мыши для прокрутки.Свойства CSS Scroll Snap прекрасно справляются с этой задачей, но затягивают плавную прокрутку колеса мыши в процессе:
https://codepen.io/Wcomp/pen/vbrqmp?editors=1100
Может ли код, который у меня есть для плавной прокрутки колеса мыши, быть адаптирован для выполнениято же самое, что:
body{
scroll-snap-type: y mandatory;
}
span{
scroll-snap-align: start;
}
CSS Scroll Snap также не дает мне никакого контроля над временем.Вот код плавной прокрутки для колеса мыши:
function mouse_wheel_scroll_behavior() {
var delay = false;
$(document).on('wheel', function(event) {
event.preventDefault();
if(delay) return;
delay = true;
setTimeout(function(){delay = false}, 100)
var wd = event.originalEvent.wheelDelta || -event.originalEvent.detail;
var a= document.getElementsByTagName('span');
if(wd < 0)
{
for(var i = 0 ; i < a.length ; i++)
{
var t = a[i].getClientRects()[0].top;
if(t >= 40) break;
}
}
else
{
for(var i = a.length-1 ; i >= 0 ; i--)
{
var t = a[i].getClientRects()[0].top;
if(t < -20) break;
}
}
if(i >= 0 && i < a.length)
{
$('html,body').animate({ scrollTop: a[i].offsetTop }, 600);
}
});
}