搜尋

首頁  >  問答  >  主體

javascript - 在行動裝置上快速滾動螢幕然後點擊使滾動停止,如何盡量避免在點擊時誤觸<a>標籤,跳到其他頁?

1 問題:
在行動裝置上快速滾動螢幕然後點擊使滾動停止,如何盡量避免在點擊時誤觸a標籤,跳到其他頁面?

2 這也是在行動端的前端開發中實際遇到的一個問題,詳細說來就是在正常情況下,當我們的當前頁面內容較多,高度上較高,出現滾動條的時候,當我們用手滑動螢幕,螢幕上頁面內容會快速滾動,不會因為手已經離開了螢幕而滾動停止。這個時候,當我們想要停止滾動的時候,我們也輕輕點擊螢幕,讓螢幕停止。但這個時候有個問題,如果螢幕上點擊的位置,剛好有一個a標籤,或是有一個button,這個時候就很容易進入下一個路由。查看了mdn上的關於scroll事件的一些說明,並沒有對scroll過程中的速度和停止的反應時間這方面的說明。

我的想法是先判斷滾動事件是否已經停止,當停止之後,再給一定時間的延時,之後的點擊才有效。這樣的話,當快速滾動之後,第一次點擊螢幕,讓螢幕滾動停止,第二次點擊螢幕,如果是點擊了一個a標籤才能跳到其他路由。應該如何實現。

我想大声告诉你我想大声告诉你2740 天前837

全部回覆(3)我來回復

  • phpcn_u1582

    phpcn_u15822017-05-24 11:38:49

    你們產品要求這麼苛刻嗎,我感覺這不應該成為問題,應該遵循這樣的物理邏輯,我是沒見過哪個產品規避了這個邏輯。如果非要解決,你的思路是可行的,那樣的話,你需要代理所有連結或有點擊行為的元素,個人認為是一種得不償失的做法。

    回覆
    0
  • 滿天的星座

    滿天的星座2017-05-24 11:38:49

    設一個狀態值就可以,就比如說,你滾動的時候狀態值isScrolling = true;當滾動完成或被點擊停止時設定isScrolling = false. 事件觸發只能在isScrolling= false時有效。

    回覆
    0
  • 巴扎黑

    巴扎黑2017-05-24 11:38:49

    我也處理過相同的問題

    • 區分點擊事件,點選事件用touch取代

    • 計算點擊的時長和判斷的距離,兩個參數,判斷是不是觸發點擊事件

    如果還不清楚的話 我晚點給你一下demo

     $('#allItems').delegate('.js-snifferFullNet','click touchend',function(e) {
                console.log('touchend test2 数据是:'+(document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop));
                var  endTime = new Date().getTime() - startTime;
                console.log(endTime);
                if(e.type=='touchend' &&((10<endTime)|| (Math.abs(touch_pos-(document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop))>3))) return;
                else{
                    console.log(this);
                    var type = e.currentTarget.childNodes[2].innerText;
                    regClickBtn.snifferAllNetBtn(type);
                }
            });

    回覆
    0
  • 取消回覆