iScroll中事件点击触发两次解决方案
iScroll这个滑动控件在我们制作手机网页时非常常见,功能丰富。但有时候,在Android的App中嵌入网页时,会出现一次点击触发两次事件的问题,这让许多开发者头疼不已。经过一番研究,我找到了一个简洁的解决方法。
这个问题源于iScroll捕获了浏览器的touchstart和touchend事件。在touchend时,它会触发元素的onclick事件。但在实际操作中,touchend会先执行,接着执行onclick的相关函数,这就造成了一次点击两次触发的问题。
解决这个问题的方法其实很简单,就是在执行完_end函数中的触发click事件的代码后,暂时移除onclick事件上绑定的函数。然后在一定时间后(比如几百毫秒),再重新添加这个事件。这样,第二次点击就不会再触发之前的函数了。为了下次还能正常使用,我们可以使用setTimeout来恢复onclick的内容。
改造后的iScroll源代码大致在约550行到570行的_end函数中。具体实现是设置一个定时器,在定时器到期后,重新创建并分发一个模拟的鼠标点击事件。我们需要找到绑定click事件的元素,然后进行处理。
举个例子,处理前我们的代码可能是这样的:
双击测试
处理后的代码则是:
双击测试
当我们的视线落在目标元素上时,我们首先要确认其身份。这个元素是否拥有独特的“onclick”属性呢?我们可以如此描述:目光聚焦之处,我们寻找那颗拥有独特魅力的元素——它身上是否刻有“onclick”的痕迹?倘若存在这样的元素,我们继续它的内在世界。
一旦确认元素的存在,我们开始深入挖掘它的“onclick”属性内容。这个属性是否藏着一些重要的指令或者神秘的代码?让我们小心翼翼地去解读这段信息。如果发现其内容并非静默无声(即不等于“void(0)”),那么这段属性中隐藏的代码可能是一段重要的操作指令。此时我们需要高度重视,因为这个属性承载着点击事件的重要操作。
为了安全起见,我们决定复制这段代码并存储在一个新的地方。我们将使用新的属性——“data-clickbak”,来保存原有的“onclick”功能。这样做是为了确保原功能的完整性和安全性。接下来,我们要对这个元素进行一场变革——改变它的“onclick”属性值。这一过程就像是给元素进行一次时尚改造,让它焕发新的活力。我们赋予它新的指令,使其在点击时能够展现出不同的风采。
我们看到一段JavaScript代码,其中涉及到了对某个对象`$(obj)`的点击事件处理。通过`$(obj).attr("onclick", "void(0)");`,我们阻止了对象的默认点击行为,这通常是为了防止在点击时发生页面跳转或其他默认动作。这是一种常见的防止暴力点击的手段。
接下来,我们看到了一个叫做`hashBox`的数组,它似乎是用来存储被特殊处理的对象。代码检查了这个数组的长度,如果长度大于0,就遍历数组,查找与`$(obj)`相等的元素,并从数组中删除它。然后,将`$(obj)`添加到数组的末尾,并调用`that._clickBack()`函数。
接下来是`_clickBack`函数的解释。这个函数的作用是还原被点击对象的事件。它使用了一个定时器来延迟执行,这样做的目的可能是为了确保在点击事件处理完之后,再恢复被点击对象原本的点击事件。如果`hashBox`中还有元素,它会继续调用自己来处理下一个对象。
如果你不想修改`iscroll`的源代码,也可以通过一个公共函数来实现类似的功能。这样,你可以在不改动原有代码的基础上,增加新的功能或处理逻辑。
这段代码在处理点击事件和滚动行为方面具有很高的实用性。通过合理使用这样的技术,我们可以为用户提供更加流畅、更加自然的交互体验。无论是网页开发者还是前端工程师,掌握这样的技巧都是非常有价值的。
通过`cambrian.render('body')`这样的语句,可能是将某些内容或组件渲染到页面的body部分。具体的实现细节和用途需要根据具体的项目或框架来确定。
希望以上解释能够帮助大家更好地理解这段代码,并在实际开发中应用这些知识,提升用户体验。
编程语言
- iScroll中事件点击触发两次解决方案
- AJAX应用之注册用户即时检测
- php常用文件操作函数汇总
- Vue Router history模式的配置方法及其原理
- 详解Vue爬坑之vuex初识
- javascript的函数劫持浅析
- JSP通用分页框架
- JS验证全角与半角及相互转化的介绍
- Apache+PHP+MySQL搭建PHP开发环境图文教程
- SQL语句计算两个日期之间有多少个工作日的方法
- Windows平台下MySQL安装与配置方法与注意事项
- 将html页改成jsp的两种方式
- PHP编程实现csv文件导入mysql数据库的方法
- 使用NodeJs 开发微信公众号(三)微信事件交互实例
- php设计模式之观察者模式的应用详解
- js逆向解密之网络爬虫