Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在香草javascript中在鼠标滚轮上平滑垂直滚动?_Javascript_Mouseevent_Mouselistener_Mousewheel - Fatal编程技术网

在香草javascript中在鼠标滚轮上平滑垂直滚动?

在香草javascript中在鼠标滚轮上平滑垂直滚动?,javascript,mouseevent,mouselistener,mousewheel,Javascript,Mouseevent,Mouselistener,Mousewheel,我是vanilla javascript的超级粉丝,目前我正在做一个项目,需要在鼠标滚轮上实现平滑滚动。我想用vanilla JS实现这一点。 我在做一些研究时发现了一个jQuery代码片段,如下所示 $(window).on('mousewheel DOMMouseScroll', function(e) { var dir, amt = 100; e.preventDefault(); if(e.type === 'mousewheel') { dir =

我是vanilla javascript的超级粉丝,目前我正在做一个项目,需要在鼠标滚轮上实现平滑滚动。我想用vanilla JS实现这一点。 我在做一些研究时发现了一个jQuery代码片段,如下所示

$(window).on('mousewheel DOMMouseScroll', function(e) {
   var dir,
   amt = 100;

   e.preventDefault();
   if(e.type === 'mousewheel') {
     dir = e.originalEvent.wheelDelta > 0 ? '-=' : '+=';
   }
   else {
     dir = e.originalEvent.detail < 0 ? '-=' : '+=';
   }      

   $('html, body').stop().animate({
     scrollTop: dir + amt
   },500, 'linear');
});
$(窗口).on('mousewheel-DOMMouseScroll',函数(e){
var dir,
金额=100;
e、 预防默认值();
如果(e.type==='mouseweel'){
dir=e.originalEvent.wheelDelta>0?'-=':'+=';
}
否则{
dir=e.originalEvent.detail<0?'-=':'+=';
}      
$('html,body').stop().animate({
滚动顶部:直接+金额
},500,'线性';
});
有谁能帮助我实现平滑滚动而不使用jQuery或任何其他库之类的帮助程序库吗


人们在jQuery中完成了许多实现。但我想要一个在vanilla JS中可以实现的最佳实现。它可以在React、Angular和Vue anywhere中的任何位置实现。

您发布的代码几乎都是普通的js。只是一些调整

如果你有时间看一看

这里的新功能是动画功能

//代码在这里
document.addEventListener('wheel',函数(事件){
//仅垂直滚动
如果(event.deltaY>0)
{
event.preventDefault();
smoothScroll(document.documentElement,1001000)
}
})
功能平滑滚动(多面元素、像素、延迟)
{
const intervalToRepeat=25;
常数步长=(间隔重复*像素)/延迟;
如果(步进<像素)
{
doElement.scrollTop+=步长;
setTimeout(函数(){
平滑滚动(DomeElement,像素-步长,延迟)
},间期重复);
}
}

你好,普朗克!
lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些

一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识,一些常识 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些 lorem ipsum一些lorem ipsum一些lorem ipsum一些lorem ipsum一些
纯JavaScript
onscroll
事件将起作用:

var container = document.getElementById('myScrollingSurface');
var lastY = 0;
container.onscroll = function () {
  doSomethingCool(container.scrollTop - lastY);
  lastY = container.scrollTop;
};
这个怎么样:

函数init(){
新的平滑滚动(文档,120,12)
}
功能平滑滚动(目标、速度、平滑){
如果(目标===文档)
目标=(document.scrollingElement
||document.documentElement
||document.body.parentNode
||document.body)//跨浏览器支持文档滚动
var=false
var pos=target.scrollTop
var frame=target==document.body
&&document.documentElement
?document.documentElement
:target//safari是新的IE
addEventListener('mousewheel',滚动,{passive:false})
addEventListener('DOMMouseScroll',滚动,{passive:false})
函数滚动(e){
e、 preventDefault();//禁用默认滚动
var delta=正常化的delta(e)
pos+=-delta*速度
pos=数学最大值(0,数学最小值(pos,target.s