【问题标题】:Forwarding mouse scroll event to another div using JavaScript使用 JavaScript 将鼠标滚动事件转发到另一个 div
【发布时间】:2023-03-30 18:10:01
【问题描述】:

标题几乎描述了我的目标。以下是代码[仅适用于 WebKit]:

我们有两个 div,elem1 和 elem2。还有一个名为 logger 的文本框来显示结果。 elem1 有一些带有溢出的文本:滚动。

function eventHandler(e){
    var myEvt = new e.constructor(e.type, e);
    document.getElementById('elem1').dispatchEvent(myEvt);
}

function elem1MouseScroll(e){
    document.getElementById('logger').value='mousescroll on ' + (e.target || e.srcElement).id + ' at (' + e.clientX + ', ' + e.clientY + ')';
}

document.getElementById('elem1').addEventListener('mousewheel', elem1MouseScroll, false);               
document.getElementById('elem2').addEventListener('mousewheel', eventHandler, false);    

http://jsfiddle.net/s4hwt886/1

[蓝色 div 上的鼠标滚轮滚动应该转发到粉色 div。顶部的文本框显示了结果。]

如您所见,即使来自 elem2 的鼠标滚轮事件在 elem1 上触发了相同的事件,但遗憾的是 elem1 中的内容实际上并没有滚动。

我很困惑。任何人都可以帮忙吗?您不必担心在 Gecko 部分不起作用。构造函数技巧在 Gecko 中不起作用,因此代码会稍大一些。这就是为什么我没有将它包含在小提琴中。

编辑:在 Chrome 中,这个小提琴就像我想要的那样工作。所以我更新了代码以支持 Gecko。不幸的是,Firefox 的行为就像 Safari。转发的事件正在触发,我可以在日志文本框中看到它,但内容没有滚动。这是更新的小提琴:http://jsfiddle.net/s4hwt886/2/

注意我想要一个非 Jquery 解决方案。我能找到的所有其他类似线程都处理 Jquery。

【问题讨论】:

  • 你的小提琴适合我。
  • 你对 FF 的看法是对的。
  • 我知道这是个废话,但 FF 确实无法支持鼠标滚轮事件。我建议您改用 scrollTo ,它在浏览器中具有更大的支持。 quirksmode.org/dom/events/scroll.html
  • 滚动到一个事件?不就是一种方法吗?
  • 在我的项目中,scrollTo 也是必需的,但遗憾的是我无法让它工作。另外,我联系了MDN的#JS IRC频道,但没有得到任何回复。为什么学习基本的 JS 功能这么难? JQuery 的开发者是如何了解这些东西的?

标签: javascript scroll mouse mousewheel forward


【解决方案1】:

您的小提琴似乎按照 chrome 上的说明工作。

【讨论】:

  • 谢谢。我刚注意到。不幸的是,这在 Firefox 或 Safari 中不起作用。我可以忽略 Safari,但我不能忽略 Firefox。我在这里上传了 Gecko 版本:jsfiddle.net/s4hwt886/2
  • 刚刚在最新的 Chrome (56) 上尝试过小提琴,但它不再起作用了。有谁知道为什么???
  • 我遇到了同样的问题。我的猜测是,这是因为该事件不是受信任的事件。但也可能是一个错误:/
  • 现在应该是wheel事件,不能用标准方法创建,只能通过特定的new WheelEvent构造函数。
猜你喜欢
  • 1970-01-01
  • 2012-02-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-01
  • 1970-01-01
  • 2011-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多