原文:https://blog.csdn.net/queenzjl/article/details/53507661 javascript
1、有的網友建議彈出層彈出時給 html 和 body 都加上「height:100%;overflow:hidden;」,然而在手機上並無什麼卵用html
2、結合彈出層加上「overflow-y:auto」依然不起做用vue
3、加上touchmove事件:window.ontouchmove = function(e){e.preventDefault();return false;},結果整個屏幕都沒法滑動,這個辦法也不行
後來通過網友的幫助,結合個人代碼終於找到了解決的辦法java
代碼以下:
ios
<!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> <title>移動端->彈出層內容滾動的時候,不影響body的滾動條處理</title> <script type="text/javascript" src="vue.js"></script> <script type="text/javascript" src="vue-resource.js"></script> <style> *{ margin:0; padding:0; } body{ height:1500px; } .mark{ width:100%; height:100%; background:rgba(0,0,0,.5); position:fixed; left:0; top:0; } .layerNode{ width:200px; height:200px; left:50%; top:50%; margin-left:-100px; margin-top:-100px; background-color:#fff; position: absolute; overflow-y:scroll; -webkit-overflow-scrolling : touch; /* ios 自帶滾動條不平滑解決方法 */ } </style> </head> <body> body層 <div class="mark"> <div id="ul" v-show="ok" > <ul id="menuList" class="layerNode"> <template v-for="item in message"> <li style="height:46px;"><a :href="getHref(item)">{{item.name}}</a></li> </template> </ul> </div> </div> <script type="text/javascript"> //彈出層滾動條不影響到body [layerNode:須要滾動的元素] var DivScroll = function( layerNode ){ //若是沒有這個元素的話,那麼將再也不執行下去 if ( !document.querySelector( layerNode ) ) return ; this.popupLayer = document.querySelector( layerNode ) ; this.startX = 0 ; this.startY = 0 ; this.popupLayer.addEventListener('touchstart', function (e) { this.startX = e.changedTouches[0].pageX; this.startY = e.changedTouches[0].pageY; }, false); // 仿innerScroll方法 this.popupLayer.addEventListener('touchmove', function (e) { e.stopPropagation(); var deltaX = e.changedTouches[0].pageX - this.startX; var deltaY = e.changedTouches[0].pageY - this.startY; // 只能縱向滾 if(Math.abs(deltaY) < Math.abs(deltaX)){ e.preventDefault(); return false; } if( this.offsetHeight + this.scrollTop >= this.scrollHeight){ if(deltaY < 0) { e.preventDefault(); return false; } } if(this.scrollTop === 0){ if(deltaY > 0) { e.preventDefault(); return false; } } // 會阻止原生滾動 // return false; },false); } //調用 var divScroll = new DivScroll('.layerNode'); ////////////////////////////////////////////// 如下是我用vue.js獲取的列表數據部分代碼,就不展現了,核心代碼都在上面 </script> </body> </html>