禁止橡皮筋效果
时间:2019-09-18
本文章向大家介绍禁止橡皮筋效果,主要包括禁止橡皮筋效果使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1 (function (global) { 2 let startY = 0 3 let enabled = false 4 let supportsPassiveOption = false 5 try { 6 let opts = Object.defineProperty({}, 'passive', { 7 get: function () { 8 supportsPassiveOption = true 9 } 10 }) 11 window.addEventListener('test', null, opts) 12 } catch (e) { 13 // console.log('false') 14 } 15 const handleTouchmove = function (evt) { 16 let el = evt.target 17 let zoom = window.innerWidth / window.document.documentElement.clientWidth 18 if (evt.touches.length > 1 || zoom !== 1) { 19 return 20 } 21 while (el !== document.body && el !== document) { 22 let style = window.getComputedStyle(el) 23 if (!style) { 24 break 25 } 26 if (el.nodeName === 'INPUT' && el.getAttribute('type') === 'range') { 27 return 28 } 29 let scrolling = style.getPropertyValue('-webkit-overflow-scrolling') 30 let overflowY = style.getPropertyValue('overflow-y') 31 let height = el.clientHeight 32 // let height = parseInt(style.getPropertyValue('height'), 10) 33 let isScrollable = scrolling === 'touch' && (overflowY === 'auto' || overflowY === 'scroll') 34 let canScroll = el.scrollHeight > el.offsetHeight 35 if (isScrollable && canScroll) { 36 let curY = evt.touches ? evt.touches[0].screenY : evt.screenY 37 let isAtTop = (startY <= curY && el.scrollTop === 0) 38 let isAtBottom = (startY >= curY && el.scrollHeight - el.scrollTop === height) 39 if (isAtTop || isAtBottom) { 40 evt.preventDefault() 41 } 42 return 43 } 44 el = el.parentNode 45 } 46 evt.preventDefault() 47 } 48 const handleTouchstart = function (evt) { 49 startY = evt.touches ? evt.touches[0].screenY : evt.screenY 50 } 51 const enable = function () { 52 window.addEventListener('touchstart', handleTouchstart, supportsPassiveOption ? { passive: false } : false) 53 window.addEventListener('touchmove', handleTouchmove, supportsPassiveOption ? { passive: false } : false) 54 enabled = true 55 } 56 const disable = function () { 57 window.removeEventListener('touchstart', handleTouchstart, false) 58 window.removeEventListener('touchmove', handleTouchmove, false) 59 enabled = false 60 } 61 const isEnabled = function () { 62 return enabled 63 } 64 let testDiv = document.createElement('div') 65 document.documentElement.appendChild(testDiv) 66 testDiv.style.WebkitOverflowScrolling = 'touch' 67 let scrollSupport = 'getComputedStyle' in window && window.getComputedStyle(testDiv)['-webkit-overflow-scrolling'] === 'touch' 68 document.documentElement.removeChild(testDiv) 69 if (scrollSupport) { 70 enable() 71 } 72 let preventOverScroll = { 73 enable: enable, 74 disable: disable, 75 isEnabled: isEnabled 76 } 77 if (typeof module !== 'undefined' && module.exports) { 78 module.exports = preventOverScroll 79 } 80 if (typeof global.define === 'function') { 81 (function (define) { 82 define('iNoBounce', [], function () { 83 return preventOverScroll 84 }) 85 }(global.define)) 86 } else { 87 global.preventOverScroll = preventOverScroll 88 } 89 }(this))
原文地址:https://www.cnblogs.com/QQPrincekin/p/11541211.html
- python strip()函数 删除字符串中无空白字符或者是无用字符
- 闪回归档的简单测试(r8笔记第68天)
- sql语句查询到整个数据库的容量
- 神奇的go语言
- 备库查询导致的ORA-01110错误及修复(r8笔记第67天)
- SQL客户端DBvisualize直接导入数据出现中文乱码
- Python基础整理操作积累
- 让AI给颜值打分?应该是最公正的裁判了!
- orion的简单测试 (r8笔记第75天)
- golang ftp客户端示例 支持断点续传
- python 网页特征提取XPATH(两天玩转) 第一天
- 和开发同学讨论的一个技术问题(r8笔记第73天)
- 剖析Oracle中oerr命令(r8笔记第70天)
- 甜品店切蛋糕问题(动态规划,Go语言实现)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 设计模式速览
- 序列模型——吴恩达深度学习课程笔记(五)
- 30分钟学会pyecharts数据可视化
- 用Keras从零开始6步骤训练神经网络
- Keras结构化数据预处理范例——Titanic生存预测
- 从原理上搞懂如何设置线程池参数大小?
- Keras图像数据预处理范例——Cifar2图片分类
- Keras文本数据预处理范例——IMDB影评情感分类
- JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof 使用详解
- Go 垃圾回收
- 如何在SpringBoot中异步请求和异步调用
- 实现 memcached 客户端:TCP、连接池、一致性哈希、自定义协议
- 30分钟学会LightGBM
- 三种计算图
- 低阶API示范