- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我注意到鼠标滚轮事件在 mac osx 中发生了多次。可以归因于惯性特征。
有没有办法解决这个问题?
(请自签名 SSL 不用担心!) https://sandbox.idev.ge/roomshotel/html5_v2/
我正在使用 scrollSections.js https://github.com/guins/jQuery.scrollSections
它使用鼠标滚轮 jquery 插件:https://github.com/brandonaaron/jquery-mousewheel
我看到很多人遇到同样的问题:https://github.com/brandonaaron/jquery-mousewheel/issues/36
有一些解决方案,但没有一个适用于 scrollSections 插件。
有什么想法可以从 JS 中禁用这种惯性特性吗?
我尝试的修复:
// Fix for OSX inertia problem, jumping sections issue.
if (isMac) {
var fireEvent;
var newDelta = deltaY;
if (oldDelta != null) {
//check to see if they differ directions
if (oldDelta < 0 && newDelta > 0) {
fireEvent = true;
}
//check to see if they differ directions
if (oldDelta > 0 && newDelta < 0) {
fireEvent = true;
}
//check to see if they are the same direction
if (oldDelta > 0 && newDelta > 0) {
//check to see if the new is higher
if (oldDelta < newDelta) {
fireEvent = true;
} else {
fireEvent = false;
}
}
//check to see if they are the same direction
if (oldDelta < 0 && newDelta < 0) {
//check to see if the new is lower
if (oldDelta > newDelta) {
fireEvent = true;
} else {
fireEvent = false;
}
}
} else {
fireEvent = true;
}
oldDelta = newDelta;
} else {
fireEvent = true;
}
您可以在此处看到修复:https://sandbox.idev.ge/roomshotel/html5_v2/但这是一个命中/未命中。
最佳答案
最新的超时解决方案有一个主要缺点:动态滚动效果可能会持续很长时间(甚至 1 秒左右)......禁用滚动 1-2 秒并不是最佳决定。
太棒了,正如所 promise 的,这是另一种方法。
我们的目标是为一个用户操作提供一个响应,在本例中为滚动。
什么是'one scrolling'?为了解决这个问题,假设'one scrolling'是一个从页面开始移动到运动结束的那一刻。
动态滚动效果是通过多次移动页面(例如,每 20 毫秒)一小段距离来实现的。这意味着我们的动态滚动由许多许多小的线性“滚动”组成。
经验测试表明,这种小“滚动”在动态滚动中间每 17-18 毫秒发生一次,在开始和结束时大约 80-90 毫秒发生一次。这是我们可以设置的一个简单测试来查看:
var oldD;
var f = function(){
var d = new Date().getTime();
if(typeof oldD !== 'undefined')
console.log(d-oldD);
oldD = d;
}
window.onscroll=f;
重要!每次发生这种迷你滚动时,都会触发滚动事件。 所以:
window.onscroll = function(){console.log("i'm scrolling!")};
在一个动能卷轴中会发射 15 到 20 次以上。顺便说一句,onscroll 有很好的浏览器支持(参见 compatibility table ),所以我们可以依赖它(触摸设备除外,稍后我会介绍这个问题);
有人可能会说重新定义window.onscroll 并不是设置事件监听器的最佳方式。是的,我们鼓励您使用
$(window).on('scroll',function(){...});
或者你喜欢什么,这不是问题的重点(我个人使用我自己写的库)。
因此,在 onscroll 事件的帮助下,我们可以可靠地判断页面的这个特定的小移动是属于一个持久的动态滚动,还是一个新的滚动:
var prevTime = new Date().getTime();
var f = function(){
var curTime = new Date().getTime();
if(typeof prevTime !== 'undefined'){
var timeDiff = curTime-prevTime;
if(timeDiff>200)
console.log('New kinetic scroll has started!');
}
prevTime = curTime;
}
window.onscroll=f;
您可以调用所需的回调函数(或事件处理程序)而不是“console.log”,这样就完成了!该函数只会在每次动态或简单滚动时触发一次,这是我们的目标。
您可能已经注意到,我使用 200 毫秒作为判断它是新滚动还是上一个滚动的一部分的标准。您可以将其设置为更大的值,以 999% 确保您阻止任何额外的调用。但是,请记住,这不是我们在我之前的回答中使用的不是。它只是任意两个页面移动之间的一段时间(无论是新卷轴还是动能卷轴的一小部分)。在我看来,动态滚动的步骤之间滞后超过 200 毫秒的可能性非常小(否则它根本不会流畅)。
正如我在上面提到的,onscroll 事件在触摸设备上的工作方式不同。它不会在动能卷轴的每一小步中触发。但它会在页面移动最终结束时触发。而且,还有ontouchmove事件……所以,没什么大不了的。如果需要,我也可以提供触摸设备的解决方案。
附言我知道我写得太多了,所以我很乐意回答您的所有问题,并在您需要时提供更多代码。
提供的解决方案在所有浏览器中都受支持,非常轻量级,更重要的是,它不仅适用于 mac,而且适用于所有可能实现动态滚动的设备,所以我认为这确实是一个可行的方法。
关于javascript - 阻止鼠标滚轮事件在 OSX 中发生两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26326958/
我正在尝试将 WPF CodeBehid 事件(如 Event、Handler、EventSetter)转换为 MVVM 模式。我不允许使用 System.Windows.Controls,因为我使用
我可能误解了 Backbone 中的事件系统,但是当我尝试以下代码时什么也没有发生。当我向 Backbone.Events 扩展对象添加新属性时,它不应该触发某种更改、更新或重置事件吗?就像模型一样吗
我遇到了一个简单的问题,就是无法弄清楚为什么它不起作用。我有一个子组件“app-buttons”,其中我有一个输入字段,我想听,所以我可以根据输入值过滤列表。 如果我将输入放在我有列表的根组件中,一切
System.Timers.Timer 的 Elapsed 事件实际上与 System.Windows.Forms.Timer 的 Tick 事件相同吗? 在特定情况下使用其中一种比使用另一种有优势吗
嗨,这个 javascript 代码段是什么意思。(evt) 部分是如此令人困惑.. evt 不是 bool 值。这个怎么运作? function checkIt(evt) { evt
我正在使用jquery full calendar我试图在事件被删除时保存它。 $('calendar').fullCalendar ({
我有两个链接的鼠标事件: $('body > form').on("mousedown", function(e){ //Do stuff }).on("mouseup", function(
这是我的代码: $( '#Example' ).on( "keypress", function( keyEvent ) { if ( keyEvent.which != 44 ) {
我尝试了 dragOver 事件处理程序,但它没有正常工作。 我正在研究钢琴,我希望能够弹奏音符,即使那个键上没有发生鼠标按下。 是否有事件处理程序? 下面是我正在制作的钢琴的图片。 最佳答案 您应该
当悬停在相邻文本上时,我需要使隐藏按钮可见。这是通过 onMouseEnter 和 onMouseLeave 事件完成的。但是当点击另外的文本时,我需要使按钮完全可见并停止 onMouseLeave
我有ul标签内 div标签。我申请了mouseup事件 div标记和 click事件 ul标签。 问题 每当我点击 ul标签,然后都是 mouseup和 click事件被触发。 我想要的是当我点击 u
我是 Javascript 和 jQuery 的新手,所以我有一个非常愚蠢的疑问,请耐心等待 $(document).click(function () { alert("!"); v
我有一个邮政编码解析器,我正在使用 keyup 事件处理程序来跟踪输入长度何时达到 5,然后查询服务器以解析邮政编码。但是我想防止脚本被不必要地调用,所以我想知道是否有一种方法可以跟踪 keydown
使用事件 API,我有以下代码来发布带有事件照片的事件 $facebook = new Facebook(array( "appId" => "XXX", "se
首次加载 Microsoft Word 时,既不会触发 NewDocument 事件也不会触发 DocumentOpen 事件。当 Word 实例已打开并打开新文档或现有文档时,这些事件会正常触发。
我发现了很多相关问题(这里和其他地方),但还没有具体找到这个问题。 我正在尝试监听箭头键 (37-40) 的按键事件,但是当以特定顺序使用箭头键时,后续箭头不会生成“按键”事件。 例子: http:/
给定的 HTML: 和 JavaScript 的: var $test = $('#test'); $test.on('keydown', function(event) { if (eve
我是 Node.js 的新手,希望使用流运行程序。对于其他程序,我必须同时启动一个服务器(mongodb、redis 等),但我不知道我是否应该用这个运行一个服务器。请让我知道我哪里出了问题以及如何纠
我正在尝试使用 Swift 和 Cocoa 创建一个适用于 OS X 的应用程序。我希望应用程序能够响应关键事件,而不将焦点放在文本字段上/文本字段中。我在 Xcode 中创建了一个带有 Storyb
我有以下代码: (function(w,d,s,l,i){ w[l]=w[l]||[];w[l].push({
我是一名优秀的程序员,十分优秀!