Maison > interface Web > js tutoriel > le corps du texte

Partage d'exemples d'opérations d'animation parabolique JS

小云云
Libérer: 2018-02-26 09:03:56
original
1645 Les gens l'ont consulté

Dans le projet de création d'une applet pratique sans pilote, un jour, le produit a déclaré qu'il apprendrait du produit d'un certain fabricant et ajouterait une animation de boule parabolique au panier. Cet article vous donne principalement une analyse détaillée du processus de production d'animation parabole JS et le partage d'exemples de code associés. Les amis intéressés peuvent s'y référer.

Laissez-moi d'abord vous montrer les rendus

Analyse

Ce genre de non-fixe start Bien sûr, l'animation de position ne peut pas utiliser d'images GIF, elle ne peut donc être implémentée qu'en utilisant du code natif

Alors, de quels outils disposons-nous pour implémenter l'animation ?

L'applet fournit l'API JS createAnimation pour créer des animations

Animation CSS

Maintenant que l'outil est disponible, passons jetez un oeil Qu'est-ce qu'une parabole.

Ici, nous discutons uniquement de la parabole horizontale. D'après le principe mathématique, la parabole horizontale est [mouvement avec une vitesse horizontale constante et une accélération verticale]. La conversion au niveau du code se fait dans la fonction de synchronisation de l'effet d'animation. utilise linéaire et l'animation verticale utilise easy-in

Nous devons donc décomposer cette animation parabolique en deux animations qui sont exécutées simultanément mais avec des effets d'animation différents.

Mise en œuvre

Mise en œuvre du mini programme

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
}
Copier après la connexion

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>
Copier après la connexion

Pour autant que je sache, l'animation implémentée avec transform: transform() aura de meilleures performances que top & left Excellent, mais après l'avoir essayé, j'ai découvert qu'il ne pouvait pas obtenir l'effet interactif idéal. J'attends avec impatience la poursuite des recherches à l'avenir

Mise en œuvre du H5


// todo
Copier après la connexion
.

Recommandations associées :

Ajouter au panier un effet d'animation parabolique basé sur le plug-in jquery fly_jquery

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal