关于iscroll5 click事件触发两次

简介: 用iscroll做滑动时,里面的元素需要绑定click 事件,但是,明明只是绑定了一次,却触发了两次。

</pre>用iscroll做滑动时,里面的元素需要绑定click 事件,但是,明明只是绑定了一次,却触发了两次。<p></p><p></p><pre name="code" class="html"><div id="wrapper" style="display:none">
	<div id="scroller">
		<ul>
			<li>Pretty row 1</li>
			<li>Pretty row 2</li>
			<li>Pretty row 3</li>
			<li>Pretty row 4</li>
			<li>Pretty row 5</li>
			<li>Pretty row 6</li>
			<li>Pretty row 7</li>
			<li>Pretty row 8</li>
			<li>Pretty row 9</li>
			<li>Pretty row 10</li>
			</ul>
	<p class="btn"> hide</p>
	</div>
</div>

<div id="footer"> show</div>


<script type="text/javascript">
	var myScroll;
	$('.btn').on('click',function(){
		$('#wrapper').hide();
	});
	$('#footer').on('click',function(){

		myScroll = new IScroll('#wrapper', { mouseWheel: true,click:true });
		$('#wrapper').show();
	})
	$('li').on('click',function(){
		console.log(3213);
	});
</script>


当wrapper显示,初始化iscorll,再点击一次 li元素是console.log只打印一次。但是,但点击btn元素时,wrapper隐藏,在点击footer元素,wrapper显示后,再点击一次li元素时


console.log只打印两次,循环操作时,每循环一次,console.log只打印次数+1。

可以在页面加载完成时,就初始化iscorll ,同时加上destory();

<script type="text/javascript">
	var myScroll = new IScroll('#wrapper', {click:true });
	$('.btn').on('click',function(){
		console.log('sdsadsad');
		myScroll.destroy();
		$('#wrapper').hide();

	});
	$('#footer').on('click',function(){

		$('#wrapper').show();
	})
	$('li').on('click',function(){
		console.log(3213);
	});
</script>
这样点击li时 console.log只打印了一次,但是点击btn时,第一次点击就打印两遍

隐藏显示,在点击btn时,只打印出一次。第一种写法 是点击一次footer 就在li元素和btn上添加一次事件绑定,所以在每次隐藏时都需要对iscorll销毁。myScroll.destroy();

这样做同样会也有多次触发的结果。

原因便是 在$btn.on('click')下有myScroll.destroy(),影响的同时 浏览器为未设置成手机模式,改为手机模式就没问题。

为了彻底避免这些情况iscorll 有一个tap事件,用tap代替click


	var $wrapper = document.getElementById('wrapper'),$btn = $('.btn'),$footer = $('#footer'),$li = $('.lia');
	var  myScroll = new IScroll($wrapper, { click:true,tap:true});
	$btn.on('tap',function(){

		myScroll.destroy();
		$wrapper.style.display = 'none';

	
	});
	$footer.on('click',function(){
		$wrapper.style.display = 'block';
		myScroll.refresh();
		
	});
	
	$li.on('tap',function(){
		console.log(3213);
	});

foot不在wrapper里  对其绑定tap 无效的。



关于Event 对象

// createEvent(eventType) 该方法将创建一种新的事件类型,该类型由参数 eventType 指定。注意,该参数的值不是要创建的事件接口的名称,而是定义那个接口的 DOM 模块的名称。
var event = document.createEvent('Event');

// event.initEvent(eventType,canBubble,cancelable)  
//eventType 	字符串值。事件的类型。
//canBubble 	事件是否起泡。
//cancelable 	是否可以用 preventDefault() 方法取消事件。
event.initEvent('build', true, true);

// Listen for the event.
elem.addEventListener('build', function (e) {
  // e.target matches elem
}, false);

// dispatchEvent() 方法给节点分派一个合成事件。
//evt必需传入。要分派的 Event 对象。
elem.dispatchEvent(event);




有需要的交流的可以加个好友


相关文章
|
前端开发 JavaScript API
React Draggable 实现拖拽 - 最详细中文教程 - 卡拉云
React Draggable 是 react 生态中,最好用的拖拽实现库之一。如果你的应用中需要实现拖拽功能,可以尝试用 react-draggable,它可以满足多数情况下的拖拽需求,比如一个弹出设置浮窗,可以相互遮挡的容器之类。在所有 react 拖拽库里(即 react dnd, drag and drop),react-draggable 算是把功能性和易用性平衡得最好的拖拽库了。
3871 0
|
12月前
|
移动开发 前端开发 JavaScript
React DnD:实现拖拽功能的终极方案?
本文首发于微信公众号“前端徐徐”,介绍了一个强大的 React 拖拽库——React DnD。React DnD 帮助开发者轻松创建复杂的拖拽界面,适用于 Trello 风格的应用、列表重排序、可拖拽的 UI 组件等场景。文章详细介绍了 React DnD 的基本信息、主要特点、使用场景及快速上手指南。
1065 3
React DnD:实现拖拽功能的终极方案?
|
关系型数据库 MySQL 数据库
在 MySQL 中使用 Alter Table
【8月更文挑战第11天】
1460 0
在 MySQL 中使用 Alter Table
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
java使用Files.walkFileTree统计文件夹下的文件夹和文件数量
223 0
|
JavaScript 前端开发 API
vue里使用driver.js实现项目功能向导指引
vue里使用driver.js实现项目功能向导指引
493 0
|
JSON 安全 算法
Spring Security系列教程27--Spring Security实现CAS单点登录--搭建CAS服务端
前言 在上一章节中,一一哥 给各位介绍了单点登录的概念、执行流程原理,并且给大家介绍了CAS单点登录解决方案,在CAS解决方案中,我们需要搭建CAS服务端和CAS客户端,本文就开始给大家介绍如何实现CAS服务端。在这里,我给大家介绍一个开源的CAS服务端模板cas-overlay-template,接下来请跟我一起看看怎么实现吧。 一. 搭建CAS服务器 1. 概述 为了测试我前面讲解的CAS请求执行流程,我们需要搭建一个CAS测试环境,本篇内容主要是带领大家搭建一个CAS Server服务端环境。搭建CAS Server环境,需要依赖如下环境: ● JDK1.8+ ● Maven3.6+
1828 0
|
存储 前端开发 搜索推荐
React——简便获取经纬度信息
React——简便获取经纬度信息
|
分布式计算 应用服务中间件 Docker
Hadoop HDFS分布式文件系统Docker版
一、Hadoop文件系统HDFS 构建单节点的伪分布式HDFS 构建4个节点的HDFS分布式系统 nameNode secondnameNode datanode1 datanode2 其中 datanode2动态节点,在HDFS系统运行时,==动态加入==。
2865 0