vue实现购物车动画功能
来源:互联网 发布:网络用语开屏 编辑:程序博客网 时间:2024/06/06 00:49
(重要)介绍一个vue项目给大家学习,阅读别人的项目可以快速提高自己哦, 移动端vue完整项目
1,这里用到了jq及基于jq的插件,插件非常的小,好像只有数kb,不用担心太多代码,不多说直接上代码,
使用前需要初始化,在mounted或者created方法里调用 this.init()
init:function(){ (function ($) { $.fly = function (element, options) { // 默认值 var defaults = { version: '1.0.0', autoPlay: true, vertex_Rtop: 10, // 默认顶点高度top值 speed: 1.2, start: {}, // top, left, width, height end: {}, onEnd: $.noop }; var self = this, $element = $(element); /** * 初始化组件,new的时候即调用 */ self.init = function (options) { this.setOptions(options); !!this.settings.autoPlay && this.play(); }; /** * 设置组件参数 */ self.setOptions = function (options) { this.settings = $.extend(true, {}, defaults, options); var settings = this.settings, start = settings.start, end = settings.end; $element.css({marginTop: '0px', marginLeft: '0px', position: 'fixed'}).appendTo('body'); // 运动过程中有改变大小 if (end.width != null && end.height != null) { $.extend(true, start, { width: $element.width(), height: $element.height() }); } // 运动轨迹最高点top值 var vertex_top = Math.min(start.top, end.top) - Math.abs(start.left - end.left) / 3; if (vertex_top < settings.vertex_Rtop) { // 可能出现起点或者终点就是运动曲线顶点的情况 vertex_top = Math.min(settings.vertex_Rtop, Math.min(start.top, end.top)); } /** * ====================================================== * 运动轨迹在页面中的top值可以抽象成函数 y = a * x*x + b; * a = curvature * b = vertex_top * ====================================================== */ var distance = Math.sqrt(Math.pow(start.top - end.top, 2) + Math.pow(start.left - end.left, 2)), // 元素移动次数 steps = Math.ceil(Math.min(Math.max(Math.log(distance) / 0.05 - 75, 30), 100) / settings.speed), ratio = start.top == vertex_top ? 0 : -Math.sqrt((end.top - vertex_top) / (start.top - vertex_top)), vertex_left = (ratio * start.left - end.left) / (ratio - 1), // 特殊情况,出现顶点left==终点left,将曲率设置为0,做直线运动。 curvature = end.left == vertex_left ? 0 : (end.top - vertex_top) / Math.pow(end.left - vertex_left, 2); $.extend(true, settings, { count: -1, // 每次重置为-1 steps: steps, vertex_left: vertex_left, vertex_top: vertex_top, curvature: curvature }); }; /** * 开始运动,可自己调用 */ self.play = function () { this.move(); }; /** * 按step运动 */ self.move = function () { var settings = this.settings, start = settings.start, count = settings.count, steps = settings.steps, end = settings.end; // 计算left top值 var left = start.left + (end.left - start.left) * count / steps, top = settings.curvature == 0 ? start.top + (end.top - start.top) * count / steps : settings.curvature * Math.pow(left - settings.vertex_left, 2) + settings.vertex_top; // 运动过程中有改变大小 if (end.width != null && end.height != null) { var i = steps / 2, width = end.width - (end.width - start.width) * Math.cos(count < i ? 0 : (count - i) / (steps - i) * Math.PI / 2), height = end.height - (end.height - start.height) * Math.cos(count < i ? 0 : (count - i) / (steps - i) * Math.PI / 2); $element.css({width: width + "px", height: height + "px", "font-size": Math.min(width, height) + "px"}); } $element.css({ left: left + "px", top: top + "px" }); settings.count++; // 定时任务 var time = window.requestAnimationFrame($.proxy(this.move, this)); if (count == steps) { window.cancelAnimationFrame(time); // fire callback settings.onEnd.apply(this); } }; /** * 销毁 */ self.destroy = function(){ $element.remove(); }; self.init(options); }; // add the plugin to the jQuery.fn object $.fn.fly = function (options) { return this.each(function () { if (undefined == $(this).data('fly')) { $(this).data('fly', new $.fly(this, options)); } }); };})(jQuery);// 兼容ie(function () { var lastTime = 0; var vendors = ['webkit', 'moz']; for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame']; } if (!window.requestAnimationFrame){ window.requestAnimationFrame = function (callback, element) { var currTime = new Date().getTime(); var timeToCall = Math.max(0, 16 - (currTime - lastTime)); var id = window.setTimeout(function () { callback(currTime + timeToCall); }, timeToCall); lastTime = currTime + timeToCall; return id; }; } if (!window.cancelAnimationFrame){ window.cancelAnimationFrame = function (id) { clearTimeout(id); }; }}()); },2,使用方法如下:(使用很简单,代码还可以优化,你们自己去优化吧 ,我就不写了,反正没什么大影响)
// 设置滚动球,加入购物车动画 // 添加购物车 add_cart:function(commondity_id){ if(this.cart_switch){ this.cart_switch = false var offset=$('#end').offset(); $(window).resize(site); function site() { offset=$('#end').offset(); } var addcar=$(this); var flyer=$('<p class="cir"></p>'); flyer.fly({ start:{ left:event.pageX, top:event.pageY }, end:{ left:offset.left+this.cirWidth, top:offset.top, width:0, height:0 } }) this.$http({ method:'get', url:'add_cart.php', params:{ user_id:getData().user_id, commodity_id:commondity_id, img_url:'test', shop_name:'test', title:'test' } }).then((res)=>{ this.cart_switch = true console.log('res = '+res.data) },(err)=>{ console.log('err = '+err) }) }else{ this.openNotify() } }, openNotify() { this.$dialog.notify({ mes: '你的操作过于频繁,请稍后再试!', timeout: 5000, callback: () => { // 回调 } }); }
3,小球投到购物车图标之后,加一些动画体验会更好哦,如下:
(1)在css里加入
0% { transform: scale(1) } 25% { transform: scale(.8) } 50% { transform: scale(1.1) } 75% { transform: scale(.9) } 100% { transform: scale(1) } } @-moz-keyframes mymove{ 0% { transform: scale(1) } 25% { transform: scale(.8) } 50% { transform: scale(1.1) } 75% { transform: scale(.9) } 100% { transform: scale(1) } } @-webkit-keyframes mymove{ 0% { transform: scale(1) } 25% { transform: scale(.8) } 50% { transform: scale(1.1) } 75% { transform: scale(.9) } 100% { transform: scale(1) } } @-o-keyframes mymove{ 0% { transform: scale(1) } 25% { transform: scale(.8) } 50% { transform: scale(1.1) } 75% { transform: scale(.9) } 100% { transform: scale(1) } }
.move{animation: mymove .5s ease-in-out;}
(2)使用方式:(通过控制this.move的boolean值,来达到一张一弛的效果)
<p :class="{move:move}"></p>
我是在请求成功后把this.move的值设置为true,然后500毫秒再设置为false
setTimeout(()=>{
this.move = false
},500)
阅读全文
0 0
- vue实现购物车动画功能
- vue简单购物车功能
- vue学习系列-demo04实现商城购物车功能
- bootstrap+vue.js实现简单的购物车功能
- vue实现简单购物车页面部分功能
- 实现购物车动画
- 购物车实现功能
- 购物车功能实现
- 购物车功能实现
- 购物车功能实现
- 添加购物车动画实现
- Juqery购物车实现动画
- PHP实现购物车功能
- 加入购物车功能实现
- javase实现购物车功能
- jQuery实现购物车功能
- 购物车功能如何实现
- angular实现购物车功能
- Java集合-Set
- 关注民生民情——华北水利水电大学“情艺”国情社情调查
- c++ 尽量不要使用#define 而是用const、enum、inline替换
- 多态的实现原理
- VueJs日志信息模块代码。
- vue实现购物车动画功能
- Java多线程系列--“JUC集合”01之 框架
- Numerically Speaking hdu 1314 大数模拟
- monkeyruuner介绍与应用
- codeforces 584C Marina and Vasya
- C++总结8——shared_ptr和weak_ptr智能指针
- serialVersionUID 的使用
- 安装AndroidStudio2.3.3
- 知乎校招面经,拿到offer