首页 > 代码库 > 两层滚动条互补干扰
两层滚动条互补干扰
滚动内层列表时,速度过快,会导致外层也滚动,影响用户体验
解决办法 一 :鼠标内层时,禁用外层滚动条
<div class="zoneDetails-content blockStyle-content layerScroll"
onm ousewheel="return divScroll(event,this)"> </div>
divScroll:function(event,scroller){ var k = event.wheelDelta? event.wheelDelta:-event.detail*10; scroller.scrollTop = scroller.scrollTop - k; return false; },
解决办法 二:鼠标滚动到顶部/底部时,再出发外层滚动条
*{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 自带滚动条不平滑解决方法 */ }
<div class="mark"> <div class="layerNode"> <p>弹出层 start</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p> <p>测试</p>
。。。
<p>弹出层 end</p> </div> </div>
//弹出层滚动条不影响到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‘);
两层滚动条互补干扰
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。