国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

JS拋物線動畫實例制作

2019-11-19 14:18:45
字體:
來源:轉載
供稿:網友

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

先給大家看下效果圖

分析

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

那我們有什么工具來實現動畫呢?

小程序提供了 JS API createAnimation 來創建動畫

CSS animation

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

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

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

實現

小程序的實現

JS:

cartAnimation(x, y) { // x y 為手指點擊的坐標,即球的起始坐標  let self = this,    cartY = app.globalData.winHeight - 50, // 結束位置(購物車圖片)縱坐標    cartX = 50, // 結束位置(購物車圖片)的橫坐標    animationX = flyX(cartX, x), // 創建球的橫向動畫    animationY = flyY(cartY, y), // 創建球的縱向動畫    this.setData({      ballX: x,      ballY: y,      showBall: true    })  setTimeoutES6(100).then(() => { // 100 秒延時,確保球已經到位并顯示    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>

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

H5 的實現

// todo

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沁阳市| 连州市| 南汇区| 项城市| 西林县| 小金县| 东乡县| 仪陇县| 隆化县| 贵阳市| 宕昌县| 曲周县| 和硕县| 达拉特旗| 衡阳县| 北辰区| 玉田县| 封丘县| 澳门| 当雄县| 子洲县| 麻阳| 崇州市| 南通市| 岳西县| 韩城市| 正阳县| 鲁山县| 贡山| 南安市| 宜兴市| 石嘴山市| 连州市| 瓮安县| 莎车县| 金山区| 土默特左旗| 广河县| 施秉县| 隆尧县| 略阳县|