Vue实现购物小球抛物线的方法实例


Posted in Vue.js onNovember 22, 2020

本文介绍的是利用Vue实现购物小球抛物线的相关内容,下面话不多说了,来一起看看详细的介绍吧

css片段

.shop{
  position: fixed;
  top: 300px;
  left: 40px;
 }
 .ball{
  position: fixed;
  left: 32px;
  bottom: 22px;
  z-index: 200;
  transition: all 0.4s cubic-bezier(0.49, -0.29, 0.75, 0.41); /*贝塞尔曲线*/
 }
 .inner{
  width: 16px;
  height: 16px;
  border-radius: 50%;
  background-color: rgb(0,160,220);
  transition: all 0.4s linear;
 }
 .cart{
  position: fixed;
  bottom: 22px;
  left: 32px;
  width: 30px;
  height: 30px;
  background-color: rgb(0,160,220);
  color: rgb(255,255,255);
 }

html片段

<div id="app">
  <ul class="shop">
   <li v-for="item in items">
    <span>{{item.text}}</span>
    <span>{{item.price}}</span>
    <button @click="additem">添加</button>
   </li>
  </ul>
 <div class="cart" style="">{{count}}</div>
  <div class="ball-container"><!--小球-->
   <div v-for="ball in balls">
    <transition name="drop" @before-enter="beforeDrop" @enter="dropping" @after-enter="afterDrop">
     <div class="ball" v-show="ball.show">
      <div class="inner inner-hook"></div>
     </div>
    </transition>
   </div>
  </div>
 </div>

js片段

<script>
  new Vue({
   el:"#app",
   data:{
    count: 0,
    items:[
     {
      text: "苹果",
      price: 15
     },
     {
      text: "香蕉",
      price: 15
     }
    ],
    balls: [ //小球 设为3个
     {
      show: false
     },
     {
      show: false
     },
     {
      show: false
     },
    ],
    dropBalls:[],
   },
   methods:{
    additem(event){
    this.drop(event.target);
    this.count ++;
    },
    drop(el){ //抛物
     for(let i=0;i<this.balls.length;i++){
      let ball= this.balls[i];
      if(!ball.show){
       ball.show = true;
       ball.el=el;
       this.dropBalls.push(ball);
       return;
      }
     }
    },
    beforeDrop(el) {/* 购物车小球动画实现 */
     let count = this.balls.length;
     while (count--) {
      let ball = this.balls[count];
      if (ball.show) {
       let rect = ball.el.getBoundingClientRect(); //元素相对于视口的位置
       let x = rect.left - 32;
       let y = -(window.innerHeight - rect.top - 22); //获取y
       el.style.display = '';
       el.style.webkitTransform = 'translateY('+y+'px)'; //translateY
       el.style.transform = 'translateY('+y+'px)';
       let inner = el.getElementsByClassName('inner-hook')[0];
       inner.style.webkitTransform = 'translateX('+x+'px)';
       inner.style.transform = 'translateX('+x+'px)';
      }
     }
   },
    dropping(el, done) { /*重置小球数量 样式重置*/
     let rf = el.offsetHeight;
     el.style.webkitTransform = 'translate3d(0,0,0)';
     el.style.transform = 'translate3d(0,0,0)';
     let inner = el.getElementsByClassName('inner-hook')[0];
     inner.style.webkitTransform = 'translate3d(0,0,0)';
     inner.style.transform = 'translate3d(0,0,0)';
     el.addEventListener('transitionend', done);
   },
    afterDrop(el) { /*初始化小球*/
     let ball = this.dropBalls.shift();
     if (ball) {
     ball.show=false;
     el.style.display = 'none';
    }
   }
  }
 })
 </script>

transtion属性可以查看官方文档,具体位置可以通过调试获得。

到此这篇关于Vue实现购物小球抛物线的文章就介绍到这了,更多相关Vue购物小球抛物线内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
vue 插槽简介及使用示例
Nov 19 Vue.js
Vue项目如何引入bootstrap、elementUI、echarts
Nov 26 Vue.js
详解Vue 的异常处理机制
Nov 30 Vue.js
深入了解Vue动态组件和异步组件
Jan 26 Vue.js
vue.js实现点击图标放大离开时缩小的代码
Jan 27 Vue.js
vue实现禁止浏览器记住密码功能的示例代码
Feb 03 Vue.js
Vue实现todo应用的示例
Feb 20 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
深入理解Vue的数据响应式
May 15 Vue.js
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
vue elementUI批量上传文件
Apr 26 Vue.js
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
Nov 20 #Vue.js
详解vue 组件注册
Nov 20 #Vue.js
vue-drawer-layout实现手势滑出菜单栏
Nov 19 #Vue.js
Vue 打包的静态文件不能直接运行的原因及解决办法
Nov 19 #Vue.js
如何使用 vue-cli 创建模板项目
Nov 19 #Vue.js
深入了解Vue3模板编译原理
Nov 19 #Vue.js
vue 获取到数据但却渲染不到页面上的解决方法
Nov 19 #Vue.js
You might like
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
php生成随机颜色的方法
2014/11/13 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
js中判断Object、Array、Function等引用类型对象是否相等
2012/08/29 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
分享Javascript中最常用的55个经典小技巧
2013/11/29 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
2016/06/21 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
JS实现烟花爆炸效果
2020/03/10 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
基于python时间处理方法(详解)
2017/08/14 Python
pygame游戏之旅 创建游戏窗口界面
2018/11/20 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python运用sklearn实现KNN分类算法
2019/10/16 Python
使用python的turtle绘画滑稽脸实例
2019/11/21 Python
Python 实现自动完成A4标签排版打印功能
2020/04/09 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
浅谈css3中的渐进增强和优雅降级
2017/12/01 HTML / CSS
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
性能服装:HYLETE
2018/08/14 全球购物
给校长的建议书500字
2014/05/15 职场文书
个人综合鉴定材料
2014/05/23 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
毕业生自荐求职信书写的技巧
2019/08/26 职场文书
php去除deprecated的实例方法
2021/11/17 PHP
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技