各位前輩好
我在做專案時候使用jQuery製作一頁滾動
https://codepen.io/floraya/pen/yNZKWq
我是使用這位大大所寫範例的方式寫
一頁滾動有成功
但結果後來設計說想要更改滾動方式
要將物品都固定在中間
說不要影響上下的header footer等
所以將內容都限制在container內
然後在container內一頁滾動
滑鼠滾動一次跳轉一個區域(.index_content)
本來以為將下指令的對象更改為
$(window).mousewheel(function (e) {
$(".container1").stop();
if (moving == 0) {
moving = 1;
if (e.deltaY == -1) {
if (n < num_li) {
n++;
};
} else {
if (n > 1) {
n--;
};
};
};
$(".container1").animate({ "scrollTop": $(".index_content0"+n).offset().top }, function () { moving = 0 });
})
即可
殊不知我大錯特錯
網頁就爆了
會一直跳來跳去
後下方滾不下去
我的codepen
請問各位大大我該如何做才對呢?
也想請問為何我的方式不行呢?
在此先感謝各位願意閱讀我的問題
學習jQuery 和JavaScript的道路好崎嶇
如果你把你原本 code 的
$(".index_content0" + n).offset().top
你會發現數字跳得比電視的民調還精彩
你的情況跟你參考的那個不同
需要抓到正確的 offset 值
進而算出需要的位移量
code
$(".container1").animate({ "scrollTop": $(".container1").scrollTop() + $(`.p0${n}`).position().top }, function () { moving = 0 });
謝謝dragonH大!!!!!
(痛哭流涕
我的那個真的跳得比電視的民調還精彩,永遠猜不到他現在要去哪裡呢....
您說需要抓到正確的 offset 值,進而算出需要的位移量
請問是因為他不是100vh所以不能直接參考那個方式寫嗎?
也謝謝龍大讓我看到es6寫法
看到陌生符號有嚇到XD
讓我上網去搜尋了相關
為了支援ie我從來沒碰過es6 @_@
JavaScript和jQuery真的好多需要學習
真的非常感謝你的回覆與幫助!
dragonH大您好
昨日研究後有修改我的頁面
因為上方的選單有需要跑錨點
故若跳錨點後往上或下會跳來跳去出現錯誤
研究後我做了修正
讓滑鼠滾動後觸發是直接位移+700px 或減 -700px
這個方法好像可行
上下滾動目前沒有判斷錯誤
我的codepen
但我現在遇到另外的問題
如果可以,懇請dragonH大協助我了解問題在哪裡,該怎麼做
1.當滑鼠滾動快一點時候
整個畫面就會卡頓
甚至有時候滾歪
位置偏掉後那上下移動700都會整個歪了
2.到達最上面或最下面時
多滾幾下
再往反方向滾動時
他會停滯超久才動作,而且也會產生偏移的情形
請問這該怎麼辦呢?
也請問是否有不用套件可以寫出來這個效果呢?
是否是因為套件所以產生這些問題呢?
謝謝您
你直接 +700 當然會有問題
因為 scrollTop:($(".container1").scrollTop()
取得的數字不一定是你所想的那樣
原本範例的
$(.p0${n}
).position().top
也不一定是取得 600
我建議直接用 lib 最省事
因為他們一定也踩過這些坑
也一定有應對方式
純 js 當然可以寫
只不過就會有一堆坑等著你跳
然後寫出來也未必會比 別人的 lib 好用
真要自己寫的話
可以去參考那些 lib 是怎麼寫的