移動端js彈出層滾動的時候 body層不可滾動的解決辦法

原文: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>
相關文章
相關標籤/搜索