最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS拋物線動畫實例制作

 更新時間:2018年02月24日 15:43:45   作者:henry_chen  
本篇文章給大家詳細(xì)分析了JS拋物線動畫制作過程以及相關(guān)的代碼實例分享,有興趣的朋友參考下。

在做無人便利小程序的項目中,某一天產(chǎn)品說要像某產(chǎn)商產(chǎn)品學(xué)習(xí),給添加購物車增加拋物線小球動畫。好吧,產(chǎn)品你最大,做!

先給大家看下效果圖

分析

這種不固定起始位置的動畫,自然不能用 gif 圖,所以只能用原生代碼實現(xiàn)

那我們有什么工具來實現(xiàn)動畫呢?

小程序提供了 JS API createAnimation 來創(chuàng)建動畫

CSS animation

工具有了,我們再看一下什么是拋物線。

這里我們只討論水平拋物線,水平拋物線從數(shù)學(xué)原理上來說就是【水平勻速、垂直加速的運(yùn)動】,轉(zhuǎn)換成代碼層面就是在動畫效果 timingFunction 中,水平動畫采用 linear ,垂直動畫采用 ease-in

所以我們需要把這個拋物線動畫分解成 兩個 同時 進(jìn)行但 不同動畫效果 的動畫。

實現(xiàn)

小程序的實現(xiàn)

JS:

cartAnimation(x, y) { // x y 為手指點擊的坐標(biāo),即球的起始坐標(biāo)
  let self = this,
    cartY = app.globalData.winHeight - 50, // 結(jié)束位置(購物車圖片)縱坐標(biāo)
    cartX = 50, // 結(jié)束位置(購物車圖片)的橫坐標(biāo)
    animationX = flyX(cartX, x), // 創(chuàng)建球的橫向動畫
    animationY = flyY(cartY, y), // 創(chuàng)建球的縱向動畫
    this.setData({
      ballX: x,
      ballY: y,
      showBall: true
    })
  setTimeoutES6(100).then(() => { // 100 秒延時,確保球已經(jīng)到位并顯示
    self.setData({
      animationX: animationX.export(),
      animationY: animationY.export(),
    })
    return setTimeoutES6(400) // 400 是球的拋物線動畫時長
  }).then(() => { // 400 秒延時后隱藏球
    this.setData({
      showBall: false,
    })
  })
}

function setTimeoutES6(sec) { // Promise 化 setTimeout
  return new Promise((resolve, reject) => {
    setTimeout(() => {resolve()}, sec)
  })
}

function flyX(cartX, oriX) { // 水平動畫
  let animation = wx.createAnimation({
    duration: 400,
    timingFunction: 'linear',
  })
  animation.left(cartX).step()
  return animation
}

function flyY(cartY, oriY) { // 垂直動畫
  let animation = wx.createAnimation({
    duration: 400,
    timingFunction: 'ease-in',
  })
  animation.top(cartY).step()
  return animation
}

HTML:

<view animation="{{animationY}}" style="position:fixed;top:{{ballY}}px;" hidden="{{!showBall}}">
  <view class="ball" animation="{{animationX}}" style="position:fixed;left:{{ballX}}px;"></view>
</view>

據(jù)我所知,用 transform: transtate() 來實現(xiàn)的動畫會比 top & left 性能更優(yōu),但嘗試下來發(fā)現(xiàn)并不能做到理想的交互效果,期待后續(xù)繼續(xù)研究吧

H5 的實現(xiàn)

// todo

相關(guān)文章

  • layer.prompt輸入層的例子

    layer.prompt輸入層的例子

    今天小編就為大家分享一篇layer.prompt輸入層的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • javascript 循環(huán)調(diào)用示例介紹

    javascript 循環(huán)調(diào)用示例介紹

    循環(huán)調(diào)用,如果已經(jīng)獲取到了結(jié)果,則退出循環(huán),下面有個不錯的示例,感興趣的朋友可以嘗試操作下
    2013-11-11
  • JavaScript 一行代碼,輕松搞定浮動快捷留言-V2升級版

    JavaScript 一行代碼,輕松搞定浮動快捷留言-V2升級版

    前天熬了大半宿發(fā)了一篇[一行代碼輕松搞定快捷留言功能],同時發(fā)布了V1.0beta版的快捷留言功能和源代碼,之所以是beta版,就是當(dāng)時感覺雖然基本功能有了,但是還不夠完善,特性也不一定合理
    2010-04-04
  • JavaScript函數(shù)定義的常見注意事項小結(jié)

    JavaScript函數(shù)定義的常見注意事項小結(jié)

    這篇文章主要介紹了JavaScript函數(shù)定義的常見注意事項,包含了常見的錯誤及注意事項,需要的朋友可以參考下
    2014-09-09
  • JS去掉字符串末尾的標(biāo)點符號及刪除最后一個字符的方法

    JS去掉字符串末尾的標(biāo)點符號及刪除最后一個字符的方法

    這篇文章主要介紹了JS去掉字符串末尾的標(biāo)點符號及刪除最后一個字符的方法,需要的朋友可以參考下
    2017-10-10
  • js生成二維碼的示例代碼

    js生成二維碼的示例代碼

    這篇文章主要介紹了js生成二維碼的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • JavaScript中“+”的陷阱深刻理解

    JavaScript中“+”的陷阱深刻理解

    本文將詳細(xì)介紹JavaScript中“+”的一些錯誤應(yīng)用,需要的朋友可以參考下
    2012-12-12
  • 十分鐘教你上手ES2020新特性

    十分鐘教你上手ES2020新特性

    這篇文章主要介紹了十分鐘教你上手ES2020新特性,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • ajax請求get與post的區(qū)別總結(jié)

    ajax請求get與post的區(qū)別總結(jié)

    本篇文章是對ajax請求get與post的區(qū)別進(jìn)行了詳細(xì)的總結(jié)介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-11-11
  • JavaScript實現(xiàn)留言板案例

    JavaScript實現(xiàn)留言板案例

    這篇文章主要為大家詳細(xì)介紹了JavaScript實現(xiàn)留言板案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03

最新評論

勃利县| 如皋市| 江津市| 神木县| 昌吉市| 诏安县| 隆回县| 曲水县| 社会| 固安县| 青神县| 璧山县| 孙吴县| 贵州省| 潼南县| 台东市| 攀枝花市| 凌云县| 虹口区| 湟中县| 济源市| 磐石市| 安西县| 鄢陵县| 甘肃省| 新野县| 宣化县| 铜鼓县| 边坝县| 满城县| 淮南市| 简阳市| 延长县| 夏津县| 耒阳市| 连州市| 织金县| 芦溪县| 当阳市| 凤阳县| 德安县|