通过向上滚动触发功能

Trigger a function by scrolling up

我想通过滚动鼠标滚轮来缩放带有某些内容的 DIV。向上滚动应该导致放大和向下滚动导致缩小。所以我知道这是可能的,因为您可以检测到 deltaY 并可以触发一个函数。所以我需要知道怎么做。这是我的尝试。

function scale(event) {
     var y = event.deltaY;
     if (y > 0) {
       document.getElementById('scalediv').style.transform = scale(1);
     }
   }
   
   
#scalediv {
  transform: scale(0.4)
 }
<div id="scalediv">
Lorem
</div>

你试过在 div 上绑定轮子吗?

document.getElementById("scalediv").addEventListener("wheel", resize);

function resize(event){
  console.log(event);
}

然后看看 event.deltaY 是负数还是正数:-)

没有边界(最小值和最大值)的简单解决方案,我相信你可以自己解决这个问题

<div id="scalediv" style="transform: scale(0.4)">
   Lorem
</div>

-

document.getElementById("scalediv").addEventListener("wheel", resize);

function resize(event) {
  console.log(event);
  var scaledDiv = document.getElementById("scalediv").style.transform;
  var regExp = /\(([^)]+)\)/;
  var scaleValue = regExp.exec(scaledDiv);
  var valueAsNumber = Number(scaleValue[1]);
  var newValue = valueAsNumber + 0.1;
  if (event.deltaY > 0) {
    newValue = valueAsNumber - 0.1;
  }
  document
    .getElementById("scalediv")
    .setAttribute("style", "transform: scale(" + newValue + ")");
}

我做了与 Lukas 的回答类似的事情,但我相信我的代码更加直接和可读。我也在此处使用 CSS custom properties 来保持当前比例大小的设置和获取更清晰且性能更高。

const div = document.querySelector('div')
const scaleVariable = '--scale-size'

window.addEventListener('wheel', scrollHandler, {
  passive: true
})

function scrollHandler (e) {
  // Find out which direction we scrolled in:
  var dir = Math.sign(e.deltaY)

  // Since dir can sometimes be -0 or 0, exclude those scenarios with this if clause
  if (dir) {
    // Get the existing CSS custom property
    const currentSize = div.style.getPropertyValue(scaleVariable)
    // Modify it in the direction of the scroll
    let newSize = parseFloat(currentSize || 1, 10) + dir * 0.1
    // Set size boundaries
    if (newSize < 0.3) newSize = 0.3
    else if (newSize > 5) newSize = 5
    // Set the new size through the property
    if (newSize) div.style.setProperty(scaleVariable, newSize.toFixed(2))
  }
}

您可以在此处观看现场演示: https://jsfiddle.net/andreasvirkus/m5w38sz9/2/

来自CSS,只有这部分是相关的(其余只是用于演示目的的样式):

div {
  --scale-size: 1;
  transform: scale(var(--scale-size));
}

最后,如果这是生产级代码,我建议您 throttle wheel 侦听器