我給body乙個overflow:hidden和高度是沒有用的。手機**上背景還是可以滑動,然後我給body乙個touchmove的preventdefault()阻止事件,body滑動阻止了,pc上面是可以了,但是手機上面滑動div還是會導致底部body的滑動,我給div 乙個阻止冒泡的事件stoppropagation(),手機**上面還是不可以。
關於preventdefault和stoppropagation,後面有時間會講解其區別。
我經過反覆測試,發現滾動軸滾到底部的時候,會觸發body的滑動,那麼我就在事件滾到底部的時候對表層的div做乙個touchmove的阻止。到達滾動軸底部,向下滑動,阻止事件,向上滑動,開啟事件。為此就要判斷touchmove的方向了。
var startx ,starty;
$("body").on("touchstart", function
(e) );
$("body").on("touchmove", function
(e)
else
if ( math.abs(x) > math.abs(y) && x < 0 )
else
if ( math.abs(y) > math.abs(x) && y > 0)
else
if ( math.abs(y) > math.abs(x) && y < 0 )
else
});
上面的方法是判斷touchmove的滑動方向。
除了上面方法判斷手機端手機滑動方向,我這裡再介紹乙個方案,就是封裝乙個角度函式,通過角度函式來判斷也還不錯!我這裡僅僅把這種方式實現上滑下滑左滑右滑列舉一下!
var startx, starty;
//獲得角度
function getangle(angx, angy) ;
//根據起點終點返回方向 1向上 2向下 3向左 4向右 0未滑動
function
getdirection
(startx, starty, endx, endy)
var angle = getangle(angx, angy);
if (angle >= -135 && angle <= -45) else
if (angle > 45 && angle < 135) else
if ((angle >= 135 && angle <= 180) || (angle >= -180 && angle < -135)) else
if (angle >= -45 && angle <= 45)
return result;
}//手指接觸螢幕
document.addeventlistener("touchstart", function
(e) , false);
//手指離開螢幕
document.addeventlistener("touchend", function
(e)
}, false);
知道滑動方向如何判斷,那麼解決這個問題我們可以判斷是否滑動到底部或者頂部,假如滑動到底部,再往下滑動,就阻止滑動,往上滑動,就開啟滑動!滑動到頂部乙個道理!總結**如下:
$('#haorooms底層背景').bind("touchmove", function
(e) );
$(".滾動的父親").bind("touchstart", function
(events) );
$(".滾動的父親 ul").bind("touchmove", function
(e)
if (math.abs(they) > math.abs(thex) && they < 0) })}
if (scrolltop < 20)
if (math.abs(they) > math.abs(thex) && they < 0) })}
});
以上方法基本上能夠阻止body的滾動,但是,有時候還是會有問題,期待更好的解決方案!
** 下面是張鑫旭的乙個解決辦法,這裡我簡單的借用一下!
css**:
.noscroll,
.noscroll
body
.noscroll
body
js**:
$.smartscroll = function
(container, selectorscrollable)
// 是否是搓瀏覽器
// 自己在這裡新增判斷和篩選
var issbbrowser;
var data = ;
// 事件處理
container.on(
var elscroll;
// 獲取標記的滾動元素,自身或子元素皆可
if (eltarget.is(selectorscrollable)) else
if ((elscroll = eltarget.parents(selectorscrollable)).length == 0)
if (!elscroll)
// 當前滾動元素標記
data.elscroll = elscroll;
// 垂直位置標記
data.posy = events.pagey;
data.scrolly = elscroll.scrolltop();
// 是否可以滾動
data.maxscroll = elscroll[0].scrollheight - elscroll[0].clientheight;
},touchmove: function
() // 滾動元素
var elscroll = data.elscroll;
// 當前的滾動高度
var scrolltop = elscroll.scrolltop();
// 現在移動的垂直位置,用來判斷是往上移動還是往下
var events = event.touches[0] || event;
// 移動距離
var distancey = events.pagey - data.posy;
if (issbbrowser)
// 上下邊緣檢測
if (distancey > 0 && scrolltop == 0)
// 下邊緣檢測
if (distancey < 0 && (scrolltop + 1 >= data.maxscroll))
},touchend: function
()
});// 防止多次重複繫結
container.data('isbindscroll', true);
};
html如下:
class="aside">
class="aside-overlay hideaside">
class="aside-content">
class="module module-filter-list">
class="module-main scrollable">
div>
div>
div>
使用:
$(
'#aside').addclass('active');
$.smartscroll($(
'#aside'), '.scrollable');
$('html').addclass('noscroll');
DIV滑動效果
slider.prototype.cycle function 單步迴圈動作 else 給div透明度賦值 switch this.direction 根據彈出方向計算和設定div的動作 else break case 2 top to bottom var opx this.target.styl...
div巢狀點選事件,div巢狀點選阻止冒泡
頁面中巢狀的兩個div都存在點選事件,當點選內部div阻止外部div點選事件的發生 需要注意的一點,在實際的頁面中可能中間有多層巢狀關係,像下圖,在div1和div2中間可能還會有幾層巢狀關係,這就不一定非要在要點選的子元素div2上加監聽事件,可以再往上取一級或多級,只要在條件的div1元素下就可...
div自動滑動,滑鼠移上停止滑動
這是在做個人站的時候展示專案成果,因為不光需要展示,還需要介紹詳細內容,就在滾動展示的地方做了這個效果以便於點開想要看的專案。首先,要做的是乙個需要滾動的區域。我前邊寫過乙個關於迴圈滾動的示例,那個是一塊塊的的滾動 實現的迴圈滾動.這次我們就做滾動區域是平滑迴圈滾動效果。下邊是布局的html 原理是...