在该代码中,我使用鼠标滚轮来放大/缩小HTML5
Canvas。我找到了一些可以标准化Chrome和Firefox之间速度差异的代码。但是,Safari中的缩放处理比任何一个都快得多。
这是我目前拥有的代码:
var handleScroll = function(e){
var delta = e.wheelDelta ? e.wheelDelta/40 : e.detail ? -e.detail/3 : 0;
if (delta) ...
return e.preventDefault() && false;
};
canvas.addEventListener('DOMMouseScroll',handleScroll,false); // For Firefox
canvas.addEventListener('mousewheel',handleScroll,false); // Everyone else
我可以使用什么代码在Chrome v10 / 11,Firefox v4,Safari v5,Opera
v11和IE9上以相同数量的鼠标滚轮滚动获得相同的“增量”值?
编辑 :进一步的调查显示一个滚动事件“向上”是:
| evt.wheelDelta | 细节
------------------ + ---------------- + ------------
Safari v5 / Win7 | 120 | 0
Safari v5 / OS X | 120 | 0
Safari v7 / OS X | 12 | 0
Chrome v11 / Win7 | 120 | 0
Chrome v37 / Win7 | 120 | 0
Chrome v11 / OS X | 3(!)| 0(可能是错误的)
Chrome v37 / OS X | 120 | 0
IE9 / Win7 | 120 | 未定义
Opera v11 / OS X | 40 | -1
Opera v24 / OS X | 120 | 0
Opera v11 / Win7 | 120 | -3
Firefox v4 / Win7 | 未定义 -3
Firefox v4 / OS X | 未定义 -1
Firefox v30 / OS X | 未定义 -1
此外,即使在缓慢移动的情况下,在OS X上使用MacBook触控板也会产生不同的结果:
wheelDelta
鼠标滚轮的值为3而不是120。detail
通常2
是这样1
,但是当滚动速度非常慢时,根本 没有事件处理程序会引起火灾 。所以问题是:
区分这种行为的最佳方法是什么(理想情况下,无需任何用户代理或OS嗅探)?
鉴于:
…我只能建议使用以下基于符号的简单计数代码:
var handleScroll = function(evt){
if (!evt) evt = event;
var direction = (evt.detail<0 || evt.wheelDelta>0) ? 1 : -1;
// Use the value as you will
};
someEl.addEventListener('DOMMouseScroll',handleScroll,false); // for Firefox
someEl.addEventListener('mousewheel', handleScroll,false); // for everyone else
最初的尝试是正确的。
这是我第一次尝试对值进行规范化的脚本。它在OS X上有两个缺陷:OS X上的Firefox生成的值应为应有值的1/3,而OS
X上的Chrome生成的值应为应有值的1/40。
// Returns +1 for a single wheel roll 'up', -1 for a single roll 'down'
var wheelDistance = function(evt){
if (!evt) evt = event;
var w=evt.wheelDelta, d=evt.detail;
if (d){
if (w) return w/d/40*d>0?1:-1; // Opera
else return -d/3; // Firefox; TODO: do not /3 for OS X
} else return w/120; // IE/Safari/Chrome TODO: /3 for Chrome OS X
};
编辑 :@Tom的一个建议是简单地将每个事件调用计为一次移动,并使用距离的符号对其进行调整。在OS
X上平滑/加速滚动时,这不会产生很好的效果,也不能很好地处理鼠标滚轮快速移动(例如wheelDelta
240)的情况,但是这种情况很少发生。由于此处描述的原因,现在该代码是此答案顶部显示的推荐技术。
问题内容: Webkit的过渡结束事件称为webkitTransitionEnd,Firefox为transitionEnd,歌剧为oTransitionEnd。用纯JS处理所有这些的好方法是什么?我应该浏览器嗅探吗?还是分别实施?我还没有发生过其他事情? 即: 要么 问题答案: Modernizr中使用了一项技术,对它进行了改进: 然后,只要需要过渡结束事件,就可以调用此函数:
鼠标事件是Web 开发中最常用的一类事件,毕竟鼠标还是最主要的定位设备。DOM3 级事件中定义了9 个鼠标事件,简介如下。 click:在用户单击主鼠标按钮(一般是左边的按钮)或者按下回车键时触发。这一点对确保易访问性很重要,意味着onclick 事件处理程序既可以通过键盘也可以通过鼠标执行。 dblclick:在用户双击主鼠标按钮(一般是左边的按钮)时触发。从技术上说,这个事件并不是DOM2 级
问题内容: 我看到了启用或禁用鼠标滚轮滚动的方法。但是,有什么方法可以调整滚动速度?我认为这太慢了。不管我使窗口多大,每次单击滚动大约三个像素。我希望它远不止于此。 有任何想法吗? 问题答案: 您可以尝试以下方法:
问题内容: 在鼠标滚轮上滚动它执行水平滚动。 已编辑 好吧,firebug说他在用 问题答案: 看来他只是将mousewheel事件映射到滚动区域。在IE中,仅通过使用方法就非常容易-滚动水平条的量为垂直条通常滚动的量。其他浏览器不支持该方法,因此您必须随心所欲地滚动任意数量:
本文向大家介绍解析javascript中鼠标滚轮事件,包括了解析javascript中鼠标滚轮事件的使用技巧和注意事项,需要的朋友参考一下 所有的现代浏览器都支持鼠标滚轮,并且在用户滚动滚轮时触发时间。浏览器通常使用鼠标滚轮滚动或缩放文档,但可以通过取消mousewheel事件来阻止这些默认操作。有一些互用性问题影响滚轮事件,但是编写跨平台的代码依旧可以行。除了Firefox之外的所有浏览器都支持
第二部分包含了支持专业编程工作所需的更高级的模块,这些模块很少出现在小脚本中。 11.1. 输出格式 reprlib 模块为大型的或深度嵌套的容器缩写显示提供了 repr() 函数的一个定制版本: >>> import reprlib >>> reprlib.repr(set('supercalifragilisticexpialidocious')) "set(['a', 'c', 'd', '