0.禁用橡皮筋效果
npm install inobounce --savehttps://www.npmjs.com/package/inobounce
1.禁止页面上下拉动(橡皮筋效果)
//禁止页面上拉下拉document.body.addEventListener('touchmove',function(e) {e.preventDefault() //阻止默认的处理方式},{ passive: false }) //passive 参数不能省略,用来兼容 ios 和 android 3.禁止页面上下拉,但不影响页面内部 scroll
:::info
第 2 点的代码会影响页面内部的 scroll,用之前的项目测试了一下,确实如此。
但如果去掉第 2 点的代码,虽然内部的 scroll 可以正常使用了,但橡皮筋的效果出现了。
:::
2.禁止页面上下拉(橡皮筋效果),但不影响页面内部 scroll
var overscroll = function(el) {//el需要滑动的元素el.addEventListener('touchstart', function() {var top = el.scrollTop,totalScroll = el.scrollHeight,currentScroll = top + el.offsetHeight//被滑动到最上方和最下方的时候if (top === 0) {el.scrollTop = 1 //0~1之间的小数会被当成0} else if (currentScroll === totalScroll) {el.scrollTop = top - 1}})el.addEventListener('touchmove', function(evt) {if (el.offsetHeight < el.scrollHeight) evt._isScroller = true})}overscroll(document.querySelector('.aaaa')) //允许滚动的区域document.body.addEventListener('touchmove',function(evt) {if (!evt._isScroller) {evt.preventDefault() //阻止默认事件(上下滑动)}},{ passive: false } //这行依旧不可以省略,用于兼容ios)
3.微信端禁止页面分享
// 隐藏微信分享菜单,当点击右上角时不会出现分享的选项document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {WeixinJSBridge.call('hideOptionMenu')})
4.禁止微信浏览器图片长按出现菜单(适用于微信 6.0 以上版本)
网上挺多代码无效,下面亲测有效(兼容 ios 与 android)
img {pointer-events: none;-webkit-pointer-events: none;-ms-pointer-events: none;-moz-pointer-events: none;}
:::info 如果是微信 6.0 以下的版本,则第 3 , 4 点一句 -webkit-touch-callout: none 即可解决的出现菜单和“显示在浏览器打开“的问题,当然最好都加上就完美了 :::
5.禁止微信浏览器长按“显示在浏览器打开”(适用于微信 6.0 以上版本)
document.oncontextmenu = function(e) {e.preventDefault()}
6.禁止复制文本
-webkit-user-select: none;user-select: none;-webkit-touch-callout: none;
7.禁止浏览器调整字体大小
/* ios 解决方案 */body {-webkit-text-size-adjust: 100% !important;text-size-adjust: 100% !important;-moz-text-size-adjust: 100% !important;}
// android 解决方案(用自执行函数强制禁止用户修改字体大小);(function() {if (typeof WeixinJSBridge == 'object' &&typeof WeixinJSBridge.invoke == 'function') {handleFontSize()} else {if (document.addEventListener) {document.addEventListener('WeixinJSBridgeReady', handleFontSize, false)} else if (document.attachEvent) {document.attachEvent('WeixinJSBridgeReady', handleFontSize)document.attachEvent('onWeixinJSBridgeReady', handleFontSize)}}function handleFontSize() {// 设置字体为默认大小并且重写事件WeixinJSBridge.invoke('setFontSizeCallback', { fontSize: 0 })WeixinJSBridge.on('menu:setfont', function() {WeixinJSBridge.invoke('setFontSizeCallback', { fontSize: 0 })})}})()
8.移动端伪类:active 无效的解决方法 - IOS 问题 :::info [1] By default, Safari Mobile does not use the :active state unless there is a touchstart event handler on the relevant element or on the .
需要在按钮元素或者 body/html 上绑定一个 touchstart 事件才能激活:active 状态。 :::
document.body.addEventListener('touchstart', function() {}) //...空函数即可
