H5全屏切換

之前有做過一個微信中的H5小項目损合,其中有一個交互就是點擊完按鈕,頁面由下往上滑動切換至下一頁娘纷。做完后發(fā)現(xiàn)在Android(華為榮耀5a嫁审、華為榮耀3c和OPPO A37m)下效果都還好,但在iphone6s(10.2)中測試時卻不盡如人意(條件有限赖晶,其它機型未測)律适,可謂一波三折。今天就從頭到尾做一次總結(jié)記錄遏插。

一折

先從最簡單的demo開始擦耀,主要代碼如下:

<div id="wrapper" class="wrapper">
  <div class="page page-one">
    <h1>第一頁</h1>
    <a href="javascript:void(0);" class="next-btn">下一頁</a>
  </div>
  <div class="hide page page-two">
    <h1>第二頁</h1>
    <a href="javascript:void(0);" class="next-btn">下一頁</a>
  </div>
  <div class="hide page page-three">
    <h1>第三頁</h1>
    <a href="javascript:void(0);" class="next-btn">下一頁</a>
  </div>
  <div class="hide page page-four">
    <h1>第四頁</h1>
  </div>
</div>

html, body, .wrapper {
  width: 100%;
  height: 100%;
}

.wrapper {
  position: relative;
  max-width: 640px;
  margin: 0 auto;
}

.hide {
  display: none;
}

.page {
  width: 100%;
  height: 100%;
  position: absolute;
  top: 0;
}

.slideUp {
  animation: SlideUp 1s ease;
}

@keyframes SlideUp {
  0% { transform: translate3d(0, 100%, 0) }
  100% { transform: translate3d(0, 0, 0) }
}

var wrapper = $('#wrapper');

var toNextPage = function(e) {

  var curParent = $(e.target).parents('.page');

  setTimeout(function(){
    curParent.addClass('hide');
  }, 1000)

  curParent.next().removeClass('hide').addClass('slideUp');
}

wrapper.on('click', '.next-btn', function(e) {

  toNextPage(e);
})

上述代碼我在三個安卓機上測試時都沒有問題,但在iOS下卻有這樣的一個異常涩堤,如果用戶不小心點擊在事件委托的元素"div.wrapper"上而非按鈕區(qū)域眷蜓,再點擊"下一頁"按鈕時,下一頁就會直接顯示出來胎围,而沒有從下到上的滑動效果吁系。。

針對這個異常白魂,我也查找了好久原因汽纤,很遺憾,福荸,至今沒能找到導(dǎo)致這個異常的原因蕴坪,但找到了兩個解決方案:

  • 不采取事件委托,將點擊事件直接綁定到a標(biāo)簽上敬锐。
  • 引入fastclick庫背传。

修復(fù)之后的效果如下:

當(dāng)引入fastclick解決異常后,我猜想台夺,這個異常會不會是由iOS本身的原生點擊事件導(dǎo)致的径玖?如果您知道原因,希望不吝指教颤介,先謝過了梳星!

二折

在解決了上述問題后赞赖,接下來為了讓按鈕看著漂亮一些,我給每一頁的翻頁a標(biāo)簽加上背景圖并去掉文本內(nèi)容:

<a href="javascript:void(0);" class="next-btn"></a>

.next-btn {
  position: absolute;
  bottom: 20px;
  left: 50%;
  margin-left: -80px;
  
  width: 160px;
  height: 60px;
  text-align: center;
  
  background: url(./../images/btn-start.png) no-repeat;
  background-size: contain;
}

這樣改動后冤灾,Android下仍沒有問題前域,但iOS下又出現(xiàn)了類似的異常:這次是直接點擊按鈕后,下一頁就會直接顯現(xiàn)出來而沒有滑動效果韵吨。匿垄。

在嘗試各種解決方法后,無意中發(fā)現(xiàn)学赛,在給a標(biāo)簽添加active選擇器后年堆,滑動效果正常吞杭,而且a標(biāo)簽的交互視覺效果似乎也更好了點盏浇。。什么鬼芽狗,問題是因此而解決了绢掰,但同上,原因還是不明童擎,研究中……

.next-btn:active {
  background-image: url(./../images/btn-start-a.png);
}

效果如下:

三折

頁面總算可以一頁一頁地順利切換了滴劲,下面需要做的是一個轉(zhuǎn)盤抽獎,這里只展示簡化部分顾复。

// html
  <div class="turntable">
    ![](./images/turntable.png)
    <div class="lottery_btn">開始抽獎</div>
    <div class="pointer"></div>
  </div>

// css
  .turntable .pointer {
    ...

    -webkit-transition: -webkit-transform 2s ease-out;
    transition: transform 2s ease-out;

    ...
  }
  
// js
wrapper.on('click', '.next-btn', function(e) {

  toNextPage(e)
}).on('click', '.lottery_btn', function(e) {

  var rotate = 'rotate3d(0, 0, 1, ' + (360*4+45) + 'deg)';

  $('.pointer').css({
    '-webkit-transform': rotate,
    'transform': rotate
  })
  // 由于我上面設(shè)置的rotate過渡時間是2秒班挖,所以在此處寫的是2.2秒后進入抽獎結(jié)果頁。
  setTimeout(function() {
     toNextPage(e)
  }, 2200)
})

首先我的想法很簡單芯砸,就是讓轉(zhuǎn)盤的指針根據(jù)結(jié)果在兩秒內(nèi)轉(zhuǎn)動四圈以上最終落在獎品上萧芙,與此同時,抽獎結(jié)果頁再緊接著滑動出來假丧。但結(jié)果卻還是出乎意料:

轉(zhuǎn)盤指針確實可以正常落在獎品上双揪,但在iOS下只轉(zhuǎn)動了不到半圈。

既然問題出在了轉(zhuǎn)動上包帚,首先想到是不是需要給轉(zhuǎn)動指針的父元素div.turntable添加transform-style以及perspective等屬性渔期,但發(fā)現(xiàn)添加后還是同樣的效果。再聯(lián)想到可能是rotate3d方法的支持性問題渴邦,于是換做rotateZ方法疯趟,轉(zhuǎn)動正常。谋梭。也就是只做了下面的變動:

var rotate = 'rotateZ(' + degree + 'deg)';

當(dāng)轉(zhuǎn)盤指針剛停止?jié)L動的時候迅办,在iOS下抽獎結(jié)果頁直接顯現(xiàn)出來,和一二折中遇見的情況很是相似章蚣。站欺。

從上面的代碼可以看出姨夹,我其實是想用setTimeout控制指針旋轉(zhuǎn)動畫結(jié)束后的下一步動作,問題其實也是出在了這個里面矾策。說白了磷账,如果有一個可以監(jiān)聽動畫結(jié)束的事件,而將下一步操作放在該事件處理程序中豈不OK贾虽?果不其然逃糟,當(dāng)通過監(jiān)聽transitionend事件來處理后,一切正撑罨恚……

$('.pointer').css({
  '-webkit-transform': rotate,
  'transform': rotate
}).on('transitionend', function() {
  toNextPage(e)
});

小結(jié)

其實上面寫了這么多绰咽,總結(jié)起來無非這兩個問題:

  • 在iOS下使用transform: rotate3d()制作旋轉(zhuǎn)動畫效果時,iOS會以最快捷的路徑從起始角度旋轉(zhuǎn)至終止角度地粪,因此旋轉(zhuǎn)角度不會超過180deg取募。所以如果要連續(xù)平滑的從起始角度過渡到終止角度,建議使用rotateX()蟆技、rotateY()和rotateZ()代替玩敏。
  • 某些情況下(應(yīng)該不限于上面三種情況),在iOS中將一個元素的display屬性從none設(shè)置為block后质礼,緊接著為其添加基于transition 和 translate 的動畫效果時旺聚,動畫效果失效。失效原因暫不明確眶蕉。砰粹。繼續(xù)研究中。

能力和條件有限造挽,總結(jié)和測試或許都有很大不足碱璃!這是demo地址 ,如果您有什么想法刽宪,希望不吝賜教厘贼!

最后附上完整效果圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市圣拄,隨后出現(xiàn)的幾起案子嘴秸,更是在濱河造成了極大的恐慌,老刑警劉巖庇谆,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件岳掐,死亡現(xiàn)場離奇詭異,居然都是意外死亡饭耳,警方通過查閱死者的電腦和手機串述,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寞肖,“玉大人纲酗,你說我怎么就攤上這事衰腌。” “怎么了觅赊?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵右蕊,是天一觀的道長。 經(jīng)常有香客問我吮螺,道長饶囚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任鸠补,我火速辦了婚禮萝风,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘紫岩。我一直安慰自己规惰,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布被因。 她就那樣靜靜地躺著卿拴,像睡著了一般衫仑。 火紅的嫁衣襯著肌膚如雪梨与。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天文狱,我揣著相機與錄音粥鞋,去河邊找鬼。 笑死瞄崇,一個胖子當(dāng)著我的面吹牛呻粹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苏研,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼等浊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了摹蘑?” 一聲冷哼從身側(cè)響起筹燕,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎衅鹿,沒想到半個月后撒踪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡大渤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年制妄,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片泵三。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡耕捞,死狀恐怖衔掸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俺抽,我是刑警寧澤具篇,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站凌埂,受9級特大地震影響驱显,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞳抓,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一埃疫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧孩哑,春花似錦栓霜、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至丛晌,卻和暖如春仅炊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澎蛛。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工抚垄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人谋逻。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓呆馁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親毁兆。 傳聞我的和親對象是個殘疾皇子浙滤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內(nèi)容