我正在尝试阻止页面元素捕获的鼠标滚轮事件导致滚动.
我期望false作为最后一个参数获得预期的结果,但在这个"canvas"元素上使用鼠标滚轮仍会导致滚动:
this.canvas.addEventListener('mousewheel', function(event) {
mouseController.wheel(event);
}, false);
Run Code Online (Sandbox Code Playgroud)
在这个"画布"元素之外,滚动需要发生.在里面,它必须只触发.wheel()方法.我究竟做错了什么?
更新大卫建议的工作修复(见下文):
更换
$('.scrollMe').bind("mousewheel DOMMouseScroll", ...)
Run Code Online (Sandbox Code Playgroud)
同
$('.scrollMe').bind("mousewheel DOMMouseScroll MozMousePixelScroll", ...)
Run Code Online (Sandbox Code Playgroud)
原始邮政
Firefox 16.0.2(最新版)显示绑定"mousewheel/DOMMouseScroll"事件时的问题.当鼠标指针位于我的目标div顶部时用鼠标滚动滚动会导致窗口滚动 - 而我显然不想这样做.
我尝试添加几种方法来阻止传播等,但似乎没有任何效果.
Javascript代码:
$(document).ready(function() {
$('.scrollMe').bind("mousewheel DOMMouseScroll", function(e) {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
var delta = parseInt(e.originalEvent.wheelDelta || -e.originalEvent.detail);
$(this).empty();
return false;
});
});
Run Code Online (Sandbox Code Playgroud)
要查看它的实际效果,请按照下面的jsFiddle链接.在示例页面上,只需将鼠标指针放在带有红色框的div中,然后使用鼠标滚轮.Firefox将首次(意外地)滚动父窗口,而其他浏览器则不会.
奇怪的是,一旦你在绑定元素上触发事件,Firefox就不会重复这种行为,这意味着它会停止滚动页面.但是,在您手动滚动页面并再次尝试后,它会重复此行为.
我也在IE9和Chrome中测试了这个,但在这些浏览器中无法检测到这个问题(意味着它们不会意外地滚动窗口),所以我猜它是特定于Firefox的(也禁用了Firefox中的每个插件等) )
这真的是firefox中的一个错误(如果有的话,是否会出现跨浏览器的黑客攻击)?或者,如果您知道任何其他解决方案以实现捕获鼠标滚轮事件的相同效果而不使页面的窗口滚动,请随时回答!
有没有办法触发具有任意增量的滚轮事件.就像jQuery做'click'一样:
$('#selector').trigger('click');
Run Code Online (Sandbox Code Playgroud)
我只需要一个像滚轮一样的东西:
$('#selector').trigger('DOMMouseScroll',{delta: -650});
//or mousewheel for other browsers
Run Code Online (Sandbox Code Playgroud)
我不能用css技巧做'假它',我需要触发实际的本机(或尽可能接近)事件.
谢谢!
我正在使用Jquery 鼠标滚轮插件,我希望能够检测用户何时完成使用滚轮.与可拖动内容中的stop:event类似的功能.有人能指出我正确的方向吗?
我正在尝试使用WebDriver进行自动化测试,但它目前无法模拟鼠标滚轮事件.作为一种解决方法,我试图用JavaScript来解雇这些事件.我现在正在直接在HTML页面上进行实验,而不是在WebDriver框架内.
我特意尝试在滚动div元素上触发鼠标滚轮事件.
到目前为止,我已经能够使用Chrome和IE9做到这一点,但我似乎无法在Firefox(5.x)中使用任何东西.
我正在使用以下跨浏览器代码来检测何时触发鼠标滚轮事件,这是我从网上抓取的.当我在我创建的滚动div(id ='view')中滚动鼠标滚轮时,此代码能够在所有浏览器中拾取事件.
<script type="text/javascript">
function wheel(event) {
var delta = 0;
if (!event) {
event = view.event;
}
if (event.wheelDelta) {
delta = event.wheelDelta / 120;
}
else if (event.detail) {
delta = -event.detail / 3;
}
alert(delta);
}
var view = document.getElementById('view');
if (view.addEventListener) {
view.addEventListener('DOMMouseScroll', wheel, false);
}
view.onmousewheel = wheel;
</script>
Run Code Online (Sandbox Code Playgroud)
调用时,下面的函数可以在Chrome和IE9中触发鼠标滚轮事件,并在上述处理程序中获取预期行为.
function ChromeWheel () {
var evt = document.createEvent("MouseEvents");
evt.initEvent('mousewheel', true, true);
evt.wheelDelta = 120;
view.dispatchEvent(evt);
}
Run Code Online (Sandbox Code Playgroud)
当然,它不适用于Firefox.我发现现有的文档太稀疏而且不知道FF如何处理这个问题.任何人都可以向我展示在Firefox中使用滚轮三角形(放置在FF预期的位置)中发射鼠标滚轮事件的最低限度,这样我的处理程序就可以将它拿起来?
javascript firefox javascript-events mousewheel dispatchevent
我知道可以上下检测,例如
function handle(delta) {
if (delta < 0) {
alert('down');
} else {
alert('up');
}
}
function wheel(event){
var delta = 0;
if (!event) event = window.event;
if (event.wheelDelta) {
delta = event.wheelDelta/120;
} else if (event.detail) {
delta = -event.detail/3;
}
if (delta)
handle(delta);
if (event.preventDefault)
event.preventDefault();
event.returnValue = false;
}
/* Initialization code. */
if (window.addEventListener)
window.addEventListener('DOMMouseScroll', wheel, false);
window.onmousewheel = document.onmousewheel = wheel;?
Run Code Online (Sandbox Code Playgroud)
但有没有办法用鼠标滚轮检测用户的鼠标是向左还是向右?
javascript scroll mousewheel internet-explorer-9 internet-explorer-10
我已经看过这个关于完全相同问题的线程,但该解决方案对我不起作用.
基本上我想要完成的是当用户与Windows窗体上的图表控件交互时的鼠标滚轮事件.
现在我尝试了一些不同的东西.
public mainForm()
{
InitializeComponent();
this.chData.MouseWheel +=new MouseEventHandler(chData_MouseWheel);
}
Run Code Online (Sandbox Code Playgroud)
我也尝试将其添加到mainForm.Designer.cs:
this.chData.TabIndex = 2;
this.chData.Text = "chart2";
this.chData.MouseWheel +=
new System.Windows.Forms.MouseEventHandler(this.chData_MouseWheel);
this.chData.MouseClick +=
new System.Windows.Forms.MouseEventHandler(this.chData_MouseClick);
this.chData.MouseDoubleClick +=
new System.Windows.Forms.MouseEventHandler(this.chData_MouseDoubleClick);
this.chData.MouseMove +=
new System.Windows.Forms.MouseEventHandler(this.chData_MouseMove);
Run Code Online (Sandbox Code Playgroud)
(我在这里包括整个块用于演示).我也有如下定义的功能:
private void chData_MouseWheel(object sender, MouseEventArgs e)
{
MessageBox.Show("FJDKS");
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我无法解决这个问题?谁能告诉我哪里出错了?提前致谢!
了解这一点的最好方法是看看这个小提琴.
注意鼠标滚轮在红色框中的固定内容上的效果如何.我想滚动的可滚动div.
如果小提琴死了 - 基本上我有一个可滚动的div,上面有固定元素.通常,当鼠标滚过可滚动的div时,它当然会滚动.但是如果你超过了固定元素,那么就不会发生滚动.根据您的站点布局,这可能对用户来说是直观的.
jQuery解决方案没问题.
我查了msdn.对于与鼠标滚轮相关的事件,只有一个选项--UIElement.MouseWheel
我想要做的是听鼠标滚轮前进(向上)和向后(向下)事件.
注意:不要 单击中轮按钮.
我使用jquery.mousewheel.js作为jQuery jScrollPane插件的一部分.
我想在某些时候禁用鼠标滚轮.
有人可以推荐一个可以做到的jQuery语句吗?
谢谢!
mousewheel ×10
javascript ×6
jquery ×5
c# ×2
firefox ×2
scroll ×2
charts ×1
events ×1
mouse ×1
mouseevent ×1
scrollwheel ×1
winforms ×1
wpf ×1