热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–滚动时触摸的手机移动应用程序选择不正确的项目

我有一个混合移动应用程序开发与手机差距,针对仅iOS设备.我使用Backbone.js作为我的MVC框架,jQuery,FastClick.js和Hammer.js用于事件.我有一

我有一个混合移动应用程序开发与手机差距,针对仅iOS设备.我使用Backbone.js作为我的MVC框架,jQuery,FastClick.js和Hammer.js用于事件.
我有一个可垂直滚动的项目列表.如果我点击某个项目,它应该打开详细信息视图.如果我在列表不滚动时点击该项目,这可以正常工作.但是如果我在列表滚动或减速时点击某个项目,它会选择错误的项目并显示其详细信息.
我在看
Tapping on scrolled list generates tap event for wrong element,Javascript scroll event for iPhone/iPad?和其他建议我收听滚动列表的onscroll事件的网站.只要用户滚动列表,就会触发此事件.我在onscroll的回调中禁用了tap事件.我在回调中设置一个定时器,超时为300ms,然后在该回调中启用tap事件,该事件在300 ms后执行.如果在计时器触发之前我得到另一个滚动事件,我取消之前的计时器并再次设置为300ms后触发.当滚动完全停止时,没有其他事件被触发.所以,我只能依靠这个事件.

问题是即使滚动减速并且没有完全停止,事件也会触发.因此,即使列表正在减速并且没有停止,计时器也会被触发,并且我再次遇到错误的详细信息选择问题.当滚动完全停止时,事件再次触发.
如果我将我的计时器增加到> 300毫秒,那么在非动量滚动的情况下,启用点击需要更长的时间并且用户将继续多次点击.

以下是代码段:

加载视图时,绑定tap事件和onscroll事件:

that.$('.scrollListItem').hammer().bind('tap',$.proxy(that.showDetail,that));
this.$('#scrollList').bind('scroll',$.proxy(this.checkscroll,this));

checkscroll功能

checkScroll: function(e){
this.$('.scrollListItem').hammer().unbind('tap');
clearTimeout(myGlobalScrollTimer);
var that = this;
myGlobalScrollTimer = setTimeout(function(){
that.$('.scrollListItem').hammer().bind('tap',$.proxy(that.showDetail,that));
},300);
}

checkScroll功能即使在滚动列表正在减速并且没有完全停止时也会正在触发.
如何检测到滚动完全停止且UI不再减速,然后才启用点击事件?有没有其他方法可以解决这个问题?请指教.

解决方法:

问题是由PhoneGap默认使用UIWebView而不是WKWebView(ios 8中引入)引起的.如果可以,请切换到使用新的WKWebView.我认为有插件,比如https://github.com/Telerik-Verified-Plugins/WKWebView,可以让你这样做.

WKWebView的一个好处是它具有明显更好的滚动事件保真度.实际上,您可能需要去抖动,因为在UIWebView仅发送1到3个滚动事件之前,您的应用将会收到数百个.

如果您感兴趣,滚动期间获得不正确坐标的原因是UIWebView使用GPU滚动可滚动区域的位图,因此它不知道准确的坐标.

如果你必须在PhoneGap中使用UIWebView,请考虑使用“click”事件来避免许多讨厌的代码来确定是否实际发生了滚动.如果你真的需要快速点击,那么这里有几个技巧来确定滚动是否仍在发生(这是来自内存所以数字可能会稍微偏离)

>根据滚动的速度设置300ms超时变量.您可以根据最后一次touchmove和touchend或touchcancel的x或y的diff来确定速度(并使用事件的时间戳真的很花哨).如果用户轻弹以产生高速,较长的滚动,则使用2.5秒的超时(根据需要调整).如果是低速滚动,请使用300ms.如果用户只是拖动,那么它的速度确实很低,使用时间约为50ms.
>保留一个标记以跟踪您的代码是否认为它正在滚动.在touchstart上,清除该标志和触摸后的计时器将阻止ui滚动
>在滚动事件处理程序中,如果前一个滚动事件的时间戳超过1.25秒,则这可能是最后一个滚动事件,因此使用100ms的超时.如果这是touchend之后的第一个滚动事件,则使用上面的速度逻辑来确定超时.
>在touchend / touchcancel上,检查可滚动区域边缘的距离.如果它接近,则补偿,因为滚动一旦碰到边缘就会结束并产生弹性视觉效果.


推荐阅读
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 本文详细探讨了 jQuery 中 `ajaxSubmit` 方法的使用技巧及其应用场景。首先,介绍了如何正确引入必要的脚本文件,如 `jquery.form.js` 和 `jquery-1.8.0.min.js`。接着,通过具体示例展示了如何利用 `ajaxSubmit` 方法实现表单的异步提交,包括数据的发送、接收和处理。此外,还讨论了该方法在不同场景下的应用,如文件上传、表单验证和动态更新页面内容等,提供了丰富的代码示例和最佳实践建议。 ... [详细]
  • async/await 是现代 JavaScript 中非常强大的异步编程工具,可以极大地简化异步代码的编写。本文将详细介绍 async 和 await 的用法及其背后的原理。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 检查在所有可能的“?”替换中,给定的二进制字符串中是否出现子字符串“10”带 1 或 0 ... [详细]
  • 单元测试:使用mocha和should.js搭建nodejs的单元测试
    2019独角兽企业重金招聘Python工程师标准BDD测试利器:mochashould.js众所周知对于任何一个项目来说,做好单元测试都是必不可少 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 利用REM实现移动端布局的高效适配技巧
    在移动设备上实现高效布局适配时,使用rem单位已成为一种流行且有效的技术。本文将分享过去一年中使用rem进行布局适配的经验和心得。rem作为一种相对单位,能够根据根元素的字体大小动态调整,从而确保不同屏幕尺寸下的布局一致性。通过合理设置根元素的字体大小,开发者可以轻松实现响应式设计,提高用户体验。此外,文章还将探讨一些常见的问题和解决方案,帮助开发者更好地掌握这一技术。 ... [详细]
  • 本文深入解析了 jQuery 中用于扩展功能的三个关键方法:`$.extend()`、`$.fn` 和 `$.fn.extend()`。其中,`$.extend()` 用于扩展 jQuery 对象本身,而 `$.fn.extend()` 则用于扩展 jQuery 的原型对象,使自定义方法能够作为 jQuery 实例的方法使用。通过这些方法,开发者可以轻松地创建和集成自定义插件,增强 jQuery 的功能。文章详细介绍了每个方法的用法、参数及实际应用场景,帮助读者更好地理解和运用这些强大的工具。 ... [详细]
  • 本文探讨了使用JavaScript在不同页面间传递参数的技术方法。具体而言,从a.html页面跳转至b.html时,如何携带参数并使b.html替代当前页面显示,而非新开窗口。文中详细介绍了实现这一功能的代码及注释,帮助开发者更好地理解和应用该技术。 ... [详细]
  • 为开发者提供了一系列实用的参考网站和资源链接,包括HTML速查手册( 和 ),帮助开发者快速查找和学习相关技术知识。此外,还涵盖了其他重要的开发工具和文档,为编程工作提供全面支持。 ... [详细]
  • 本文全面解析了JavaScript中的DOM操作,并提供了详细的实践指南。DOM节点(Node)通常代表一个标签、文本或HTML属性,每个节点都具有一个nodeType属性,用于标识其类型。文章深入探讨了DOM节点的创建、查询、修改和删除等操作,结合实际案例,帮助读者更好地理解和掌握DOM编程技术。 ... [详细]
  • 在使用 jQuery 的 `html()` 方法时,我发现了一个奇怪的现象:该方法无法完整地插入指定的字符串内容。具体来说,当尝试插入较长或包含特殊字符的字符串时,部分内容可能会被截断或丢失。这一问题可能与 jQuery 对字符串的处理方式有关,建议在实际应用中进行充分测试以确保数据完整性。 ... [详细]
author-avatar
qixian0392_648
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有