JSAPI筆記6

時(shí)間:2019/10/22

5).動(dòng)畫(huà)函數(shù)封裝
1.動(dòng)畫(huà)實(shí)現(xiàn)原理:通過(guò)定時(shí)器setInterval()不斷移動(dòng)盒子位置(具有定位屬性的盒子)。停止動(dòng)畫(huà)本質(zhì)是停止定時(shí)器。
2.動(dòng)畫(huà)函數(shù)簡(jiǎn)單封裝(需要傳遞目標(biāo)對(duì)象和目標(biāo)位置兩個(gè)參數(shù))

<script type="text/javascript">
  var box = document.querySelector('.box');

  animate(box, 800);

  function animate(obj, target) {
    // 解決不斷觸發(fā)事件生成多個(gè)定時(shí)器問(wèn)題
    if (obj.timer) clearInterval(obj.timer);
    // 給不同元素指定定時(shí)器,性能優(yōu)化
   obj.timer = setInterval(function() {
      if (obj.offsetLeft == target) {
        clearInterval(obj.timer);
      } else {
        // 此時(shí)步長(zhǎng)都為1,勻速效果運(yùn)動(dòng)
        obj.style.left = obj.offsetLeft + 1 + 'px';
      }
    }, 15);
  }
        
</script>

3.緩動(dòng)動(dòng)畫(huà)原理:讓盒子每次移動(dòng)的距離慢慢變小,速度慢慢減小(減速效果)。
核心算法:(目標(biāo)位置 - 當(dāng)前位置)/ 10 值作為每次移動(dòng)的的步長(zhǎng)

function animate(obj, target) {
  if (obj.timer) clearInterval(obj.timer);
  obj.timer = setInterval(function() {
    var step = (target - obj.offsetLeft) / 10;
    if (step == 0) {
      clearInterval(obj.timer);
    } else {
      // 步長(zhǎng)取整,避免因小數(shù)運(yùn)算而達(dá)不到目標(biāo)距離
      // 正向滑動(dòng),步長(zhǎng)向上取整;反向滑動(dòng),步長(zhǎng)向下取整
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      obj.style.left = obj.offsetLeft + step + 'px';
     }
  }, 15);
}

4.動(dòng)畫(huà)函數(shù)封裝
PS:回調(diào)函數(shù)原理(將函數(shù)作為參數(shù)傳遞到另一個(gè)函數(shù)中,當(dāng)另一個(gè)函數(shù)執(zhí)行完之后,再執(zhí)行傳遞進(jìn)去的函數(shù))

function animate(obj, target, callBack) {
  if (obj.timer) clearInterval(obj.timer);
  obj.timer = setInterval(function() {
    var step = (target - obj.offsetLeft) / 10;
    if (step == 0) {
      clearInterval(obj.timer);
      // 添加回調(diào)函數(shù),存在時(shí),在動(dòng)畫(huà)執(zhí)行完之后執(zhí)行(短路運(yùn)算)
      callBack && callBack();
    } else {
      step = step > 0 ? Math.ceil(step) : Math.floor(step);
      obj.style.left = obj.offsetLeft + step + 'px';
    }
  }, 15);
}

5.輪播圖案例思路:


功能簡(jiǎn)介.jpg

顯示隱藏.jpg

底部圓鈕.jpg

點(diǎn)擊圓鈕.jpg

左右按鈕.jpg

按鈕與圓鈕聯(lián)動(dòng).jpg

自動(dòng)播放.jpg

PS:輪播圖加上節(jié)流閥(定義flag變量),防止左右按鈕快速點(diǎn)擊使圖片切換過(guò)快。
(執(zhí)行某個(gè)事件函數(shù)時(shí)打開(kāi)節(jié)流閥(flag = false),在某個(gè)回調(diào)中關(guān)閉節(jié)流閥(flag = true),每次觸發(fā)事件時(shí)判斷flag狀態(tài))

6.返回頂部案例思路:


頁(yè)面滾動(dòng).jpg

動(dòng)畫(huà)返回頂部.jpg

7.筋斗云案例思路:


功能介紹.jpg

具體操作.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,689評(píng)論 1 32
  • 信號(hào)處理 傅里葉變換 F(t) = F_0 + \sum_{n=1}^{\infty}(A_ncos(n\Omeg...
    逑飯閱讀 2,745評(píng)論 0 1
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,694評(píng)論 0 7
  • 這些天在參加cp學(xué)社的學(xué)習(xí),每天要輸出語(yǔ)音三分鐘。剛開(kāi)始,我做筆記寫稿,流得很順暢;后來(lái),我嘗試寫提綱脫稿,可內(nèi)心...
    彤達(dá)閱讀 235評(píng)論 2 6
  • 二寶昨天感冒,請(qǐng)假不上學(xué)。他說(shuō)去涼茶鋪買感冒涼茶給他喝。其實(shí)感冒涼是不單純屬‘’涼‘’的那類,更多是屬傷寒里‘驅(qū)寒...
    微言不語(yǔ)閱讀 277評(píng)論 0 0

友情鏈接更多精彩內(nèi)容