vue框架制作购物车小球动画效果实例代码


Posted in Javascript onSeptember 26, 2019

最近在学习前端制作了一个购物车小球的动画效果

直接上图看看效果

vue框架制作购物车小球动画效果实例代码

下面介绍一下制作这个动画的详细过程:

1.因为使用vue锁业需要使用transition标签包裹 并指定动画三个动画生命周期函数

<transition 
 		@before-enter="beforeEnter"
 		@enter="enter"
 		@after-enter="afterEnter">
 		<div class="ball" v-if="Ballflag" ref="ball"></div> //Ballflag默认指定为false不显示
 	</transition>

样式设置成一个红色的小球采用absolute定位确保不影响页面的其他元素

.ball{
		width: 15px;
		height: 15px;
		border-radius: 50%;
		background-color: red;
		position: absolute;
		top: 413px;
		left: 80px;
		z-index: 99;
}

然后设置按钮 Ballflag = !Ballflag 取非 触发动画效果(这里就不多说了)

如果起始位置和终点位置都使用px固定死的话对于不同的分辨率的设备效果都有所不同所以为避免这一情况我采用了动态计算出 起始位置和终点位置下面是具体的动画的代码

.ball{
		width: 15px;
		height: 15px;
		border-radius: 50%;
		background-color: red;
		position: absolute;
		top: 413px;
		left: 80px;
		z-index: 99;
}

通过动态的计算出起点位置和终点的位置来实现动画效果(优势可以适配不同分辨率的设备)看到现在似乎整个动画效果已经完成了。

不过我在测试使用的时候发现一个问题

当我点击按钮触发动画的时候往下拉滚动条发现动画终点的位置并不是期望的那样到达购物车的位置原因是我在给小球设置样式的时候给display设置的absolute绝对定位 只会计算出一个页面中的绝对的位置,无法跟着滚动条来动。后来又想到可以使用fixed布局相对这屏幕来运动不受页面滚动的影响所以实现的代码如下样式

.ball{
		width: 15px;
		height: 15px;
		border-radius: 50%;
		background-color: red;
		position: fixed;
		z-index: 99;
		top: 413px;
		left: 80px;

	}

****注意这里的boxPosition是页面中数量1的位置 即定位小球的位置

beforeEnter(el){
			
			var boxPosition = this.$refs.boxPosition.getBoundingClientRect();
			// console.log(boxPosition)
			// 获取目标的起始位置 
			var dist = boxPosition.y -413;
			el.style.transform = "translate(0,"+dist+"px)";
		},
		enter(el,done){
			el.offsetWidth;
			
			var boxPosition = this.$refs.boxPosition.getBoundingClientRect();
			var badgePosition = document.getElementById("badge").getBoundingClientRect();

			//目标的起始位置
			var dist = boxPosition.y -413; 
			
			// 这里因为是使用boxPosition的位置不是小球的位置所以-10调整一下误差
			var xDist = badgePosition.left - boxPosition.left -10; 

			//这里要加上起始的定位
			var yDist = badgePosition.top - boxPosition.top + dist;
			
			el.style.transform = "translate("+xDist+"px, "+yDist+"px)";
			el.style.transition = "all 1s ease";
			done();
		},
		afterEnter(el){
			this.Ballflag = !this.Ballflag;
		},

这里就已经完成了小球的动画效果了

这样的动画不会因为页面的滚动而无法准确的定位而且还能适配不同分辨率的设备。

总结

以上所述是小编给大家介绍的vue框架制作购物车小球动画效果实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
基于jquery的大众点评,分类导航实现代码
Aug 23 Javascript
jquery禁用右键单击功能屏蔽F5刷新
Mar 17 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
JavaScript严格模式下关于this的几种指向详解
Jul 12 Javascript
javascript 通过键名获取键盘的keyCode方法
Dec 31 Javascript
微信小程序实现团购或秒杀批量倒计时
Nov 01 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
使用JavaScript实现node.js中的path.join方法
Aug 12 Javascript
angular6的响应式表单的实现
Oct 10 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
Aug 23 Javascript
vue滚动插件better-scroll使用详解
Oct 18 Javascript
vuejs实现下拉框菜单选择
Oct 23 Javascript
IDEA安装vue插件图文详解
Sep 26 #Javascript
layui use 定义js外部引用函数的方法
Sep 26 #Javascript
解决layui的radio属性或别的属性没显示出来的问题
Sep 26 #Javascript
对Layer UI 模块化的用法详解
Sep 26 #Javascript
vue源码中的检测方法的实现
Sep 26 #Javascript
IntelliJ IDEA编辑器配置vue高亮显示
Sep 26 #Javascript
layer.open 子页面弹出层向父页面传输数据的例子
Sep 26 #Javascript
You might like
PHP分页效率终结版(推荐)
2013/07/01 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
Yii CFileCache 获取不到值的原因分析
2017/02/08 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
javascript 常用关键字列表集合
2007/12/04 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
JavaScript DOM 学习总结(五)
2015/11/24 Javascript
JS实现环形进度条(从0到100%)效果
2016/07/05 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
AngularJS定时器的使用与移除操作方法【interval与timeout】
2016/12/14 Javascript
loading动画特效小结
2017/01/22 Javascript
Node.js使用NodeMailer发送邮件实例代码
2017/03/06 Javascript
Vue.js进阶知识点总结
2018/04/01 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
[06:33]3.19 DOTA2发布会 海涛、冷冷、2009见证希望
2014/03/21 DOTA
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
Python3.2模拟实现webqq登录
2016/02/15 Python
Python连接DB2数据库
2016/08/27 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
2017/01/12 Python
理论讲解python多进程并发编程
2018/02/09 Python
Python cookbook(数据结构与算法)实现对不原生支持比较操作的对象排序算法示例
2018/03/15 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
关于python多重赋值的小问题
2019/04/17 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
Python OpenCV读取中文路径图像的方法
2020/07/02 Python
秘鲁购物网站:Linio秘鲁
2017/04/07 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
年终晚会主持词
2014/03/25 职场文书
2014五年级班主任工作总结
2014/12/05 职场文书
青年教师个人总结
2015/02/11 职场文书
2015年度物业公司工作总结
2015/04/27 职场文书
廉洁自律承诺书2016
2016/03/25 职场文书
Django 实现jwt认证的示例
2021/04/30 Python