iScroll中那些需要理解的细节部分
来源:互联网 发布:福州广电网络电视电话 编辑:程序博客网 时间:2024/06/05 18:49
问题1:bindToWrapper主要作用是什么?
解答:move事件一般都是绑定在document上面的而不是wrapper元素上,这时候当你在wrapper外移动游标/手指,这个scroller元素也会一直滚动。但是如果你可以把事件绑定在wrapper上,这时候只要指针离开了wrapper那么scroller就会停止!
_initEvents: function (remove) {var eventType = remove ? utils.removeEvent : utils.addEvent,target = this.options.bindToWrapper ? this.wrapper : window;eventType(window, 'orientationchange', this);eventType(window, 'resize', this);if ( this.options.click ) {eventType(this.wrapper, 'click', this, true);} //disableMouse= utils.hasPointer || utils.hasTouch //也就是说没有pointer事件和touch事件的时候我们就会绑定mouse事件,如mousedown等if ( !this.options.disableMouse ) {eventType(this.wrapper, 'mousedown', this);eventType(target, 'mousemove', this);eventType(target, 'mousecancel', this);eventType(target, 'mouseup', this);} //disablePointer : !utils.hasPointer //如果有pointer事件,同时pointer事件没有被阻止,那么我们添加pointer事件if ( utils.hasPointer && !this.options.disablePointer ) {eventType(this.wrapper, utils.prefixPointerEvent('pointerdown'), this);eventType(target, utils.prefixPointerEvent('pointermove'), this);eventType(target, utils.prefixPointerEvent('pointercancel'), this);eventType(target, utils.prefixPointerEvent('pointerup'), this);} //如果有touch同时touch没有被阻止那么添加touch事件 //hasTouch: 'ontouchstart' in windowif ( utils.hasTouch && !this.options.disableTouch ) {eventType(this.wrapper, 'touchstart', this);eventType(target, 'touchmove', this);eventType(target, 'touchcancel', this);eventType(target, 'touchend', this);} //为scroller添加transitionend事件监听滚动是否结束eventType(this.scroller, 'transitionend', this);eventType(this.scroller, 'webkitTransitionEnd', this);eventType(this.scroller, 'oTransitionEnd', this);eventType(this.scroller, 'MSTransitionEnd', this);}
注意:从上面的代码中可以看到,其中mousedown,pointerdown,touchstart都是绑定在wrapper上,其他都是绑定在wrapper或者window上,主要看使用者是否指定了bindToWrapper属性,如果指定了那么mousemove/mousecancel/mouseup等其他事件都是绑定在wrapper元素上,这时候当你移动到wrapperw外面的时候就不会响应事件了!
接下来我们分析一下hasTouch,disablePointer,disableTouch等内容:
判断是否有pointer事件:
hasPointer: !!(window.PointerEvent || window.MSPointerEvent), // IE10 is prefixed
我们判断是否有touch事件|:
hasTouch: 'ontouchstart' in window我们再来看看disableTouch,disablePointer等方法
disablePointer : !utils.hasPointer,//是否禁止pointer事件disableTouch : utils.hasPointer || !utils.hasTouch,//是否禁止touch。如果有Pointer事件或者没有Touch事件可以取消Touch事件disableMouse : utils.hasPointer || utils.hasTouch,//是否禁止Mouse。如果有指针事件或者Touch事件可以取消Mouse事件
注意:如果没有PointerEvent那么应该禁止pointer event;如果有PointerEvent那么禁止Touch,如果没有Touch也禁止Touch;如果有Pointer或者有Touch那么应该禁止Mouse事件。默认情况下,iScroll会监听所有的指针事件同时会处理第一个触发的同类事件(功能检测)。功能检测虽然看起来很浪费资源,而且很不可靠,但是监听所有的事件是最安全的方式来判断浏览器/设备兼容性。如果你有设备检测的内部机制或者你预先知道你的脚本的执行环境,那么你可以禁止掉一系列的事件(mouse,pointer,touch)事件!
总结:上面的initEvent就是根据设备类型为我们的wrapper元素绑定相应的touch/mouse/pointer事件,同时transitionEnd事件用于判断当元素滚动结束后应该执行的回调
- iScroll中那些需要理解的细节部分
- Java编程中那些需要注意的细节
- iscroll插件需要注意的问题
- 求职中那些纠结的细节
- 网页设计中那些不容忽视的细节
- jQuery中需要注意的细节问题
- 编程中需要注意的细节
- C++中需要注意的细节
- 界面设计中需要注意的小细节
- 飞机大战中需要注意的细节
- 生活中需要注意的细节
- javascript中需要注意的几个细节
- Object-C中需要注意的细节
- iOS中需要注意的小细节
- 软件开发中需要注意的细节
- PHP7中需要记住的细节
- 串口的那些细节
- Activity中那些需要重写的方法
- HTTP协议
- xml解析--通讯管理系统(图形界面版)
- 初学者读论文
- c++写杨辉三角
- android 安装 SDK的时候报错!!! 他说拒绝访问https://dl-ssl.google.com??
- iScroll中那些需要理解的细节部分
- MemoryHook 内存统计
- (五) 驱动注册
- web
- [Extjs6]浅谈对admin-dashboard模板左侧菜单树的修改
- 动态规划算法
- 圆形头像
- CentOS7安装jdk7
- python学习之 理解编码的encode,decode