车轮事件 javascript 给出不一致的值

wheel event javascript give inconsistent values

我正在使用 html / javascript / css
开发缩放功能 我将 wheel 事件侦听器附加到我的 div 标签 和 console.log(event.wheelDelta)
它与鼠标配合得很好。 console.log 为放大提供 120 的正倍数,否则为负

触摸板有问题

在放大手势时,它不会给出一致的值。中间有一些 -120。因此变焦非常粗糙。
如何实现平滑缩放或如何使用触摸板获得一致的 wheelDelta

event.wheelDelta 并未在每个浏览器中定义,根据 its Mozilla documention. You could use the values event.deltaX and event.deltaY. For further information, please refer to Mozilla wheel documentation.

已弃用且不应再使用

我在 Google Chrome 和 Mozilla Firefox 中测试了以下代码。价值观非常不同。 Google Chrome 始终 returns 作为 event.deltaY100-100。在 Mozilla Firefox 中它总是 returns 值 3-3.

document.addEventListener('wheel', function(event) {
    console.log(event.deltaX, event.deltaY);
});

我不会依赖于滚轮值,而是像 Mozilla scroll documentation:

中描述的那样听滚动事件
var lastKnownScrollPosition = 0;
var ticking = false;

function doSomething(scrollPosition) {
    console.log(scrollPosition);
}

window.addEventListener('scroll', function(e) {
    lastKnownScrollPosition = window.scrollY;
    if(!ticking) {
        window.requestAnimationFrame(function() {
            doSomething(lastKnownScrollPosition);
            ticking = false;
        });
    }
    ticking = true;
});

使用event.wheelDeltaYevent.deltaY
console.log(event.wheelDeltaY) 鼠标:

对于触摸板:

而不是-120,它给出 0。出现在 wheelDelta 中的 -120 实际上是水平滚动的结果(wheelDeltaX)。(当您尝试使用触摸板放大时,也可能有轻微的水平运动)
当它为 0 时不要缩放,您将获得一致的平滑缩放!

var Scale = 1;

document.addEventListener("wheel",function(e){

  if(e.wheelDelta>0) Scale+=0.01; 
  else Scale-=0.01;

  // use Scale variable ....

  e.preventDefault();
});