iT邦幫忙

1

各位前輩好

我在做專案時候使用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的道路好崎嶇/images/emoticon/emoticon02.gif

1 個回答

3
dragonH
iT邦大師 3 級 ‧ 2019-08-26 21:22:34
最佳解答

codepen

如果你把你原本 code 的

$(".index_content0" + n).offset().top

你會發現數字跳得比電視的民調還精彩 /images/emoticon/emoticon01.gif

你的情況跟你參考的那個不同

需要抓到正確的 offset 值

進而算出需要的位移量

code

$(".container1").animate({ "scrollTop": $(".container1").scrollTop() + $(`.p0${n}`).position().top }, function () { moving = 0 });
看更多先前的回應...收起先前的回應...
okaybeok iT邦新手 5 級 ‧ 2019-08-27 10:09:46 檢舉

謝謝dragonH大!!!!!
(痛哭流涕

我的那個真的跳得比電視的民調還精彩,永遠猜不到他現在要去哪裡呢..../images/emoticon/emoticon06.gif

您說需要抓到正確的 offset 值,進而算出需要的位移量
請問是因為他不是100vh所以不能直接參考那個方式寫嗎?

也謝謝龍大讓我看到es6寫法
看到陌生符號有嚇到XD
讓我上網去搜尋了相關
為了支援ie我從來沒碰過es6 @_@

JavaScript和jQuery真的好多需要學習

真的非常感謝你的回覆與幫助!

dragonH iT邦大師 3 級 ‧ 2019-08-27 10:24:40 檢舉

我原本也以為是高度的問題

後來實測

codepen

發現高度不影響


不能直接參考的原因是因為

範例是高度是 100vh

然後他的情況可以根據 .offset().top(絕對位置)

取得正確的位移量

你的情況是

在某個 div(.contain1) 的 elements

根據 element 在 div(.contain1) 的 相對位置

來進行位移

這篇可以參考 position 跟 offset 的差別

okaybeok iT邦新手 5 級 ‧ 2019-08-28 15:20:08 檢舉

dragonH大您好
昨日研究後有修改我的頁面

因為上方的選單有需要跑錨點
故若跳錨點後往上或下會跳來跳去出現錯誤
研究後我做了修正
讓滑鼠滾動後觸發是直接位移+700px 或減 -700px
這個方法好像可行
上下滾動目前沒有判斷錯誤

我的codepen

但我現在遇到另外的問題
如果可以,懇請dragonH大協助我了解問題在哪裡,該怎麼做/images/emoticon/emoticon02.gif

1.當滑鼠滾動快一點時候
整個畫面就會卡頓
甚至有時候滾歪
位置偏掉後那上下移動700都會整個歪了

2.到達最上面或最下面時
多滾幾下
再往反方向滾動時
他會停滯超久才動作,而且也會產生偏移的情形

請問這該怎麼辦呢?

也請問是否有不用套件可以寫出來這個效果呢?
是否是因為套件所以產生這些問題呢?

謝謝您

dragonH iT邦大師 3 級 ‧ 2019-08-28 21:56:18 檢舉

你直接 +700 當然會有問題

因為 scrollTop:($(".container1").scrollTop()

取得的數字不一定是你所想的那樣

原本範例的

$(.p0${n}).position().top

也不一定是取得 600

我建議直接用 lib 最省事

因為他們一定也踩過這些坑

也一定有應對方式

純 js 當然可以寫

只不過就會有一堆坑等著你跳

然後寫出來也未必會比 別人的 lib 好用

真要自己寫的話

可以去參考那些 lib 是怎麼寫的

我要發表回答

立即登入回答