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 相关文章推荐
JavaScript 弹出窗体点击按钮返回选择数据的实现
Apr 01 Javascript
jquery取子节点及当前节点属性值的方法
Sep 09 Javascript
js如何判断输入字符串长度
Dec 16 Javascript
判断横屏竖屏(三种)
Feb 13 Javascript
jQuery中each循环的跳出和结束实例
Aug 16 jQuery
微信小程序日历组件使用方法详解
Dec 29 Javascript
通过JavaScript下载文件到本地的方法(单文件)
Mar 17 Javascript
vue中keep-alive,include的缓存问题
Nov 26 Javascript
Angular封装表单控件及思想总结
Dec 11 Javascript
通过微信公众平台获取公众号文章的方法示例
Dec 25 Javascript
使用PreloadJS加载图片资源的基础方法详解
Feb 03 Javascript
vue项目中使用多选框的实例代码
Jul 22 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中的类-什么叫类
2006/11/20 PHP
PHP CLI模式下的多进程应用分析
2013/06/03 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
2018/06/04 PHP
Javascript中的delete介绍
2012/09/02 Javascript
php与js的区别是什么
2013/08/05 Javascript
ExtJS DOM元素操作经验分享
2013/08/28 Javascript
js控制iframe的高度/宽度让其自适应内容
2014/04/09 Javascript
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
jQuery实现倒计时(倒计时年月日可自己输入)
2016/12/02 Javascript
js实现用户输入的小写字母自动转大写字母的方法
2017/01/21 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
jQuery实现滚动效果
2017/11/17 jQuery
详解webpack babel的配置
2018/01/09 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
[02:30]辉夜杯主赛事第二日胜者组半决赛 CDEC.Y赛后采访
2015/12/26 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
python PIL模块与随机生成中文验证码
2016/02/27 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
python版本五子棋的实现代码
2018/12/11 Python
python实现人机猜拳小游戏
2020/02/03 Python
python的setattr函数实例用法
2020/12/16 Python
html5图片上传预览示例分享
2014/04/14 HTML / CSS
加拿大建筑和装修专家:Reno-Depot
2017/12/21 全球购物
Uber Eats台湾:寻找附近提供送餐服务的餐厅
2018/05/07 全球购物
澳大利亚鞋仓库:Shoe Warehouse
2019/07/25 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
介绍一下write命令
2014/08/10 面试题
优秀应届毕业生自荐书
2014/06/29 职场文书
廉政文化进校园广播稿
2014/10/20 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
2014年度安全工作总结
2014/12/04 职场文书
Python采集壁纸并实现炫轮播
2022/04/30 Python