最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

zooming - How can I prevent full page zoom on mousewheel event in Javascript? - Stack Overflow

programmeradmin0浏览0评论

I want to be able to use the trackpad and the wheel event to update the scale of a DOM element. It works like expected however on several browsers it also perform a full page zoom.

I want to keep my scale update but I want to prevent the full page zoom.

I've read that adding e.preventDefault in the wheel event would prevent that. I had it but it doesn't seem to work.

Here's my codepen:

I want to be able to use the trackpad and the wheel event to update the scale of a DOM element. It works like expected however on several browsers it also perform a full page zoom.

I want to keep my scale update but I want to prevent the full page zoom.

I've read that adding e.preventDefault in the wheel event would prevent that. I had it but it doesn't seem to work.

Here's my codepen: https://codepen.io/ChucKN0risK/full/JqwrVe

Share Improve this question asked Jun 5, 2019 at 17:18 ChucKN0risKChucKN0risK 4252 gold badges9 silver badges18 bronze badges 3
  • Have you seen this article: medium./@auchenberg/…? – Cohars Commented Jun 6, 2019 at 8:48
  • Yes I did and I even test the provided demo. However the zoom also triggers a full page zoom. The article ments advise to use e.preventDefault(); which doesn't work. – ChucKN0risK Commented Jun 6, 2019 at 9:02
  • Thanks to @Mteuahasan answer I updated the code provided by the OP so that it prevents a full page zoom: codepen.io/ChucKN0risK/pen/YbbjNL. – ChucKN0risK Commented Jun 6, 2019 at 9:54
Add a ment  | 

2 Answers 2

Reset to default 9

Event binded at document level (window.document, window.document.body, or window) are treated as passive and can't be prevented. You should specify that the event is not passive with { passive: false } as third parameter of your addEventListener function. See this link for more info.

In your case :

document.addEventListener('wheel', function(e) {
    e.preventDefault();
    e.stopPropagation();

    if (e.ctrlKey) {
        var s = Math.exp(-e.deltaY / 100);
        scale *= s;
    } else {
        var direction = 1; //natural.checked ? -1 : 1;
        tx += e.deltaX * direction;
        ty += e.deltaY * direction;
    }
    var transform = 'translate(' + tx + 'px, ' + ty + 'px) scale(' + scale + ')';
    box.style.webkitTransform = transform;
    box.style.transform = transform;
}, {
    passive: false // Add this
});

Moreover it won't work on codepen due to the use of the iframe as event is binded on the iframe and not on the codepen page itself.

e.preventDefault();  e.stopPropagation();

Try using both of these

发布评论

评论列表(0)

  1. 暂无评论