快应用-实现添加购物车的动画效果

因为在快应用中,相比web的js有很多方法不支持,所以实现起来比较受限制。这里写了一个简易的效果。未用到贝塞尔曲线,想做的效果更完美的话可以花时间尝试一下。

实现后的效果:
在这里插入图片描述

核心实现代码

template :

<template>
	<div>
		<!--红点的元素-->
    	<div class="fly" show="{{showfly}}" style="{{positonStyle}}"></div>
    </div>
</template>

style:

<style>
.fly{position:fixed;width:30px;height:30px;background-color: #ff0000;border-radius:100px;}
</style>

script:

export default {
  private: {
  	positonStyle: {}, //红点样式
    showfly: false, //是否展示红点
  },
  
   //点击商品 触发动画
  clickFood(e) {
    var me = this;
    //显示红点
    me.showfly = true; 
    //获取点击商品的位置坐标值
    var left = e.changedTouches[0].clientX;
    var top = e.changedTouches[0].clientY;
    //设置红点动画的起始位置
    me.positonStyle = {
      'left': left + "px",
      'top': top + "px",
    }
	
	//执行红点动画
    var animate_rate = 0;
    let myFunction = setInterval(() => {
      animate_rate += 0.01;
      animate_rate = animate_rate > 1 ? 1 : animate_rate;
      var scaleRate = 1;
      scaleRate = (1 - (animate_rate * 0.5));
      if (animate_rate >= 1) {
        clearInterval(myFunction);
        scaleRate = 0;
        me.addFoodByOften(idx);
      }

	 // 这里的 坐标140,1300  是左下角 "已选"按钮 的坐标(动画目标位置)
      var leftdistance = 140 - left;
      var topdistance = 1300 - top;

      var newleft = left + (leftdistance * animate_rate);
      var newtop = top + (topdistance * animate_rate);

      me.positonStyle = {
        'left': newleft + "px",
        'top': newtop + "px",
        'transform': 'scaleX(' + scaleRate + ')' + ' scaleY(' + scaleRate + ')',
      }
    }, 6)
  }
}

不足之处
1.没能实现贝塞尔曲线效果
2.左下角 "已选"按钮 的坐标位置是代码里写固定了,在不同设备上坐标位置会不同从而影响实现效果。应该通过代码获取它在屏幕的坐标位置,可是我没能找到获取它坐标位置的方法。(这个在 web的js中是可以获取到的,然而快应用不行。如果有知道的同学,请不吝赐教,谢谢!)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值