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 相关文章推荐
vuex的数据渲染与修改浅析
Nov 26 Vue.js
Vue router安装及使用方法解析
Dec 02 Vue.js
Vue实现图书管理小案例
Dec 03 Vue.js
8个非常实用的Vue自定义指令
Dec 15 Vue.js
Vue——解决报错 Computed property &quot;****&quot; was assigned to but it has no setter.
Dec 19 Vue.js
vue实现树状表格效果
Dec 29 Vue.js
vscode自定义vue模板的实现
Jan 27 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
Vue过滤器(filter)实现及应用场景详解
Jun 15 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
浅谈Vue的computed计算属性
Mar 21 Vue.js
vue封装数字翻牌器
Apr 20 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 微信公众平台开发模式实现多客服的实例代码
2016/11/07 PHP
cakephp常见知识点汇总
2017/02/24 PHP
JS控制文本域只读或可写属性的方法
2016/06/24 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
Javascript生成带参数的二维码示例
2016/10/10 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
2017/06/07 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
vue组件详解之使用slot分发内容
2018/04/09 Javascript
微信小程序入口场景的问题集合与相关解决方法
2019/06/26 Javascript
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
微信小程序后端实现授权登录
2020/02/24 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
js实现简单商品筛选功能
2021/02/02 Javascript
Python 流程控制实例代码
2009/09/25 Python
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
Python抓取百度查询结果的方法
2015/07/08 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
python多维数组切片方法
2018/04/13 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
欧洲最大的球衣网上商店:Kitbag
2017/11/11 全球购物
英国电子产品购物网站:TobyDeals
2018/07/30 全球购物
法国在线药房:1001Pharmacies
2021/03/07 全球购物
Java基础类库面试题
2013/09/04 面试题
行政总监岗位职责
2013/12/05 职场文书
保健品市场营销方案
2014/03/31 职场文书
服务标兵事迹材料
2014/05/04 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
新员工考核评语
2014/12/31 职场文书
幽灵公主观后感
2015/06/09 职场文书
趣味运动会赞词
2015/07/22 职场文书
民警忠诚教育心得体会
2016/01/23 职场文书
Python基础之教你怎么在M1系统上使用pandas
2021/05/08 Python
Python内置的数据类型及使用方法
2022/04/13 Python