vue 2.0 + 如何实现加入购物车,小球飞入的动画
github源码地址:https://github.com/13476075014/node-vue/tree/master/mynodeproject/13.sell/sell
在移动端经常会有加入购物车,小球飞入的动画效果,具体如下图,图片略微拙劣,我自己截自己写的小效果的,,,

一:小球的html代码如下:
<!-- 加入购入车按钮的小球动画实现 -->
<div class="ball-container">
<transition v-on:after-enter="afterEnter" v-on:enter="enter" v-on:before-enter="beforeEnter" name="drop" v-for="(litterBall,indexBall) in balls" :key="indexBall">
<div v-show="litterBall.show" class="ball">
<div class="inner" :class="indexBall"> </div>
</div>
</transition>
</div>
* 小球用的 transition标签包住的,在上面写上vue的javascript动画生命钩子
v-on:before-enter="beforeEnter" (动画进入前)
v-on:enter="enter"(动画进入时)
v-on:after-enter="afterEnter" (动画进入完后)
二:js部分
2.1 在data里面加上小球的数据,这里准备了比较多的,可以在有人点着玩的时候,很快速的点也尽量不出现bug:
export default {
name:"goods",
data(){
return {
......, //别的数据
balls:[//小球
{show:false,index:0},
{show:false,index:1},
{show:false,index:2},
{show:false,index:3},
{show:false,index:4},
{show:false,index:5},
{show:false,index:6},
{show:false,index:7},
{show:false,index:8},
{show:false,index:9},
{show:false,index:10},
{show:false,index:11}
],
dropBall:[] //已经在下降的小球存在这里
}
}
2.2 在methods 中写入加入购物车的加号点击时候的小球部分的方法,把点击的元素存在data的balls中,便于后面获取其位置,把小球展示出来:
methods:{
...... //别的一些方法
, drop(el){//小球动画方法,el就是加号按钮元素
for(var i=0;i<this.balls.length;i++){
if(!this.balls[i].show){//把小球show为false的变成true,展示出来
let ball = this.balls[i];
ball.show = true; //这里这样写他继承的this.balls的值也会变成true
ball.el = el; //把这个球的位置保留下来
this.dropBall.push(ball); //把这个已经drop的球放到dropBall中
//console.log(this.dropBall,222)
return //结束循环和函数,不会让循环再往后执行了
}
}
},
..... //别的一些方法
}
2.3 在 metholds中写入 transition动画的几个javascript生命钩子函数方法:
methods:{
....... //别的方法省略,具体看github上有源代码
, beforeEnter(els){
let count = this.dropBall.length -1 ; //获取要下降中的小球个数
let ball = this.dropBall[count]; //获取最新点击成show:true的小球
let rect = ball.el.getBoundingClientRect(); //getBoundingClientRect()可以获取到元素对象和窗口的相对上下左右的距离
var rect2 = els.getBoundingClientRect();
let x = rect.left - 18 ; //点击元素的左边距离 - 下面购物车左边的距离,就是小球要运动的X轴距离
let y =-(window.innerHeight - rect.top -32) ;//窗口的高度 - 点击元素离窗口的高度 - 购物车底部的padding,margin高度,就是小球要运动的y轴距离,且是向下运动,所以是负值
//els.style.display ="";
els.style.opacity = 1;
els.style.webkitTransform = `translate3d(0,${y}px,0)`;
els.style.transform = `translate3d(0,${y}px,0)`; //外层做纵轴运动
//内层做横轴运动
let inner = els.getElementsByClassName('inner')[0];
inner.style.webkitTransform = `translate3d(${x}px,0,0)`;
inner.style.transform = `translate3d(${x}px,0,0)`;
},
enter(els,done){
var _this = this;
let hh = els.offsetHeight; //手动获取这个值,触发浏览器重绘
_this.$nextTick(function(){
//内层做横轴运动
els.style.opacity = "0";
let inner = els.getElementsByClassName('inner')[0];
Velocity(els,{translate3d:"translate3d(0,0,0)"},{duration:600}); //这里引入了第三方动画插件,需要先 npm i velocity-animate --save ,和 引入 import Velocity from 'velocity-animate'
Velocity(inner,{translate3d:"translate3d(0,0,0)"},{duration:600,complete:function(){
done();
}
});
});
},
afterEnter(els){
let ball = this.dropBall.shift();
if(ball){
ball.show = false;
els.style.display = "none"; //这个很重要
}
},
...... //一些别的方法
}
三:css部分
/*用的stylus编译 */
.ball-container
.ball
position fixed
left 32px
bottom 22px
z-index 900
transform translate3d(0,0,0)
transition all 0.6s cubic-bezier(0.49,-0.29,0.75,0.41) //这个很重要,要变成曲线就需要这个贝赛尔曲线
.inner
width 16px
height 16px
border-radius 100%
background rgb(0,160,220)
transition all 0.6s linear
transform translate3d(0,0,0)
vue 2.0 + 如何实现加入购物车,小球飞入的动画的更多相关文章
- vue 2.0 购物车小球抛物线
备注:此项目模仿 饿了吗.我用的是最新的Vue, 视频上的一些写法已经被废弃了. 布局代码 <div class="ball-container"> <trans ...
- 使用vue模拟购物车小球动画
使用vue模拟购物车小球动画 1.效果演示 2.相关代码 <!DOCTYPE html> <html lang="en"> <head> < ...
- vue.js加入购物车小球动画
生成一个动画小球的div,并且生成五个小球,五个是为了生成一定数量的小球来作为操作使用,按照小球动画的速度,一般来说五个也可以保证有足够的小球数量来运行动画 动画的内容分别是外层和内层,外层控制动画小 ...
- 关于购物车添加按钮的动画(vue.js)
来自:https://segmentfault.com/a/1190000009294321 (侵删) git 源码地址 https://github.com/ustbhuangyi/vue-sel ...
- 使用 Vue 2.0 实现服务端渲染的 HackerNews
Vue 2.0 支持服务端渲染 (SSR),并且是流式的,可以做组件级的缓存,这使得极速渲染成为可能.同时, 和 2.0 也都能够配合 SSR 提供同构路由和客户端 state hydration.v ...
- 新手入门指导:Vue 2.0 的建议学习顺序
起步 1. 扎实的 JavaScript / HTML / CSS 基本功.这是前置条件. 2. 通读官方教程 (guide) 的基础篇.不要用任何构建工具,就只用最简单的 <script> ...
- Vue.2.0.5-过渡状态
过渡状态 Vue 的过渡系统提供了非常多简单的方法设置进入.离开和列表的动效.那么对于数据元素本身的动效呢,比如: 数字和运算 颜色的显示 SVG 节点的位置 元素的大小和其他的属性 所有的原始数字都 ...
- vue 2.0 无法编译ES6语法
# vue2.0 webpack 无法编译 ES6 语法 之前在使用 vue 1.x 时用 vue-loader@8.0.0 版本可以正常打包vue的代码,包括ES6语法也能正常转为ES5语法,但是当 ...
- Vue 2.0初学后个人总结及分享
摘要:最近在上海找工作,发现Vue前景还不错,于是就打算先学习一下(之前了解过,但是一直没提到日程上)这篇随笔当是为了自己学习之后,做一个小的阶段性总结.希望本文的内容对于刚开始接触vue的朋友们有点 ...
随机推荐
- ctl +→ = MAC 触控板三指手势
我只想发一个这个:一直用外接显示器,但是不舍得抛弃全屏程序的切换,即:触控板三指手势. 期间各种百度无果,最多找到出最多的是触发角: 今天终于发现了:ctl +→ = MAC 触控板三指手势 (外 ...
- Greenwich.SR2版本的Spring Cloud Eureka实例
作为微服务架构中最为核心和基础的服务治理,注册中心提供了微服务实例的自动化注册与发现.而作为一个服务注册中心,eureka的作用与传统的zk.etcd的作用是一样的,同样也支持高可用(集群).不同之处 ...
- Qt编写控件属性设计器8-网络采集
一.前言 上一篇文章已经打通了数据源之一的串口采集,这次要说的是网络采集,网络通信目前用的最多的是三种,TCP/UDP/HTTP,其中tcp通信又包括了客户端服务端两种,tcp通信才用了多次握手机制不 ...
- PAT 甲级 1044 Shopping in Mars (25 分)(滑动窗口,尺取法,也可二分)
1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay ...
- Docker 镜像小结---操作指令介绍(七)
目录 一.搜索镜像 二.下载镜像 三.查看本地镜像 四.显示镜像构建历史 五.删除镜像 六.镜像创建 七.上传镜像 八.给镜像打 tag 九.存出和载入镜像 一.搜索镜像 很多情况下我们可能需要下载某 ...
- Egret入门学习日记 --- 第九篇(书中 2.7~2.8节 内容)
第九篇(书中 2.7~2.8节 内容) 昨天记录到了 2.6节 ,那么今天就从 2.7节 开始. 这个 2.7节 有7个小段,有点长,总结一下重点: 1.调试项目的两种方法. 2.运行项目的两种窗口选 ...
- 计数器+打卡+习惯+目标APP推荐
目录 一.计数器类APP推荐 1.1. Thing Counter - Google Play 上的应用 1.2. Counter - Apps on Google Play 1.3. Counter ...
- Jenkins简单入门:下载-安装-配置-构建
Jenkins简单配置流程 官网下载地址:https://jenkins.io/index.html 1.下载安装Jenkins (1)点击Download Jenkins进入下载页 (2)根据自己运 ...
- PCL学习(三) SAC-IA 估记object pose
SAC-IA是基于RANSAC算法的对齐算法 通过降采样提高法向计算.FPFH特征的计算 最后通过SAC-IA计算得到对齐的旋转和平移 #include <Eigen/Core> #inc ...
- 一篇搞定Java过滤器
Filter:过滤器 引言 我们可以通过使用前面的技术,做出一些简单的登陆注册以及配合数据库实现对数据增删改查的Demo,程序是基本运行起来了,但是却存在着一个重大的安全问题,那就登陆权限验证,一般来 ...