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 相关文章推荐
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 Vue.js
vue+elementUI动态增加表单项并添加验证的代码详解
Dec 17 Vue.js
Vue.extend 登录注册模态框的实现
Dec 29 Vue.js
vue 页面跳转的实现方式
Jan 12 Vue.js
聊聊vue 中的v-on参数问题
Jan 29 Vue.js
Vue常用API、高级API的相关总结
Feb 02 Vue.js
详解Vue的七种传值方式
Feb 08 Vue.js
vue路由实现登录拦截
Mar 24 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
使用vuex-persistedstate本地存储vuex
Apr 29 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
php调用MySQL存储过程的方法集合(推荐)
2013/07/03 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php动态添加url查询参数的方法
2015/04/14 PHP
Nigma vs Liquid BO3 第一场2.13
2021/03/10 DOTA
javascript函数库-集合框架
2007/04/27 Javascript
Javascript图像处理—虚拟边缘介绍及使用方法
2012/12/27 Javascript
javascript内置对象arguments详解
2014/03/16 Javascript
一看就懂:jsonp详解
2015/06/01 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
详解Javascript ES6中的箭头函数(Arrow Functions)
2016/08/24 Javascript
AngularJS  ng-table插件设置排序
2016/09/21 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
javascript的惯性运动实现代码实例
2019/09/07 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
Python类属性与实例属性用法分析
2015/05/09 Python
在Django框架中伪造捕捉到的URLconf值的方法
2015/07/18 Python
Python首次安装后运行报错(0xc000007b)的解决方法
2016/10/18 Python
Python设计模式之工厂方法模式实例详解
2019/01/18 Python
python 内置函数汇总详解
2019/09/16 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
python的dict判断key是否存在的方法
2020/12/09 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
会计专业应届生求职信
2013/11/24 职场文书
校园活动策划书范文
2014/01/10 职场文书
学校十一活动方案
2014/02/01 职场文书
家长建议怎么写
2014/05/15 职场文书
项目经理任命书
2014/06/04 职场文书
学校花圃的标语
2014/06/18 职场文书
早会开场白台词大全
2015/06/01 职场文书
小学运动会加油词
2015/07/18 职场文书
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python
Win11如何默认打开软件界面最大化?Win11默认打开软件界面最大化的方法
2022/07/15 数码科技