app活動頁面上的痛點

來源:互聯網
上載者:User

標籤:interval   需要   禁用   highlight   延遲   定時器   其他   定時   img   

app項目上需要做一個小的活動,先看下頁面配置

需求是這5個板塊逐個展示,展示一塊的時候,頁面整體向上滾動一定的距離。

剛開始考慮的時候,是準備依賴css3屬性的transition實現的,包括順序延遲都沒有任何問題,可是等到真正實現的時候,發現無法監聽每一個模組展示之後,實現捲軸的滾動。(或者是因為我沒有考慮到怎麼監聽吧)

然後剩下的一條路就是setInterval和setTimeout了,首先想到的是setInterval,因為有多個模組嘛,逐一展示,自然是開啟間隔定時器(setInterval)了,執行中,發現兩個問題,一個是無法在合適的時候,關閉定時器了;第二個問題是,直接操作捲軸滾動的話,沒有緩動效果,看起來特別生硬的感覺。

第一個問題,很容易解決了,替換成延時定時器setTimeout,每一個模組延遲不一樣的時間,就解決了逐一展示的問題。

操作捲軸,需要緩動效果,就比較坑了。

討論了很久,發現,如果直接操作頁面捲軸的話,是沒有辦法實現緩動的。不得已,轉換思路:

緩動,只有運動函數和css的animation,transition才有easing 函式,那麼就是定方案了。

採用運動函數的話,肯定需要定位,那麼頁面的內建的捲軸可能就沒法使用了。

css方案的話,需要根據子項目的滾動,來實作類別似於整個document.body的向上滾動,也是一大痛點。

最終決定採用css方案,配合延遲定時器,每展示一個模組,類似於document.body的盒模型,我採用了一個.main整個包裹了所有元素,所以我這裡向上滑動的就是.main,

.main向上滑動的距離等於每個模組需要滑動的距離乘以當前元素的序號。

$(‘.main‘).css({    ‘transform‘: ‘-webkit-translateY(-‘+ 80 * i+ ‘px)‘,    ‘transform‘: ‘translateY(-‘+ 80 * i+ ‘px)‘,    ‘transition‘: ‘-webkit-transform 800ms ease-in-out‘,    ‘transition‘: ‘transform 800ms ease-in-out‘});

當所有模組都展示之後,這裡其實採用了一個偷懶的方法,實在是沒有找到怎麼監聽最後一個模組已經展示完全的方案。

setTimeout(function(){    $(document.body).click();}, 5200);

  其實就是再開啟一個延遲定時器,在5200ms之後,觸發其他需要的事件。

由於需要一個觸發點,所以在5200ms之後,用js類比了一次頁面點擊事件,在這個點擊事件內部實現所有需要完成的工作。

$(document.body).on(‘click‘, function(){    $(‘.main‘).css({        ‘transform‘: ‘-webkit-translateY(0)‘,         ‘transform‘: ‘translateY(0)‘,         ‘transition‘: ‘-webkit-transform 0ms steps(1)‘,         ‘transition‘: ‘transform 0ms steps(1)‘    });    $(‘.content‘).scrollTop(320);});

  為了不影響頁面捲軸的滑動,必須將向上的位移重設為0, 並且偷偷的把捲軸滾動到當前的位置。

這裡transition的使用有一個技巧,從當前的位移,回到0,必須一步完成,不能讓使用者從效果上看出來頁面在來復原動,所以用到了steps(1)的屬性,而且在0ms之內。

到這裡,基本完成需求了,但是當我在操作頁面的時候,又發現了一點問題,就是當模組還沒有完全展示的時候,使用者滑動了頁面,結果看起來就不那麼友好了。

所以採用了模組沒有展示的時候,禁用觸屏滑動的事件,等到頁面類比點擊事件的時候,再放開觸屏滾動的事件。

$(document.body).on(‘touchmove.move‘,function(e){    e.preventDefault();    e.stopPropagation();});

 放開觸屏事件: 

$(document.body).off(‘touchmove.move‘)

  基本完成需求了。叫做打完收工。

app活動頁面上的痛點

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.