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中音频wavesurfer.js的使用方法
Feb 20 Vue.js
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
使用vue编写h5公众号跳转小程序的实现代码
Nov 27 Vue.js
vue添加自定义右键菜单的完整实例
Dec 08 Vue.js
vue使用exif获取图片旋转,压缩的示例代码
Dec 11 Vue.js
vue下拉刷新组件的开发及slot的使用详解
Dec 23 Vue.js
vue中封装axios并实现api接口的统一管理
Dec 25 Vue.js
vue+vant 上传图片需要注意的地方
Jan 03 Vue.js
Vue中引入svg图标的两种方式
Jan 14 Vue.js
Vue通过懒加载提升页面响应速度
May 10 Vue.js
Vue中foreach数组与js中遍历数组的写法说明
Jun 05 Vue.js
vue实现书本翻页动画效果实例详解
Apr 08 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 数组的一个悲剧?
2011/05/11 PHP
PHP 实现explort() 功能的详解
2013/06/20 PHP
php function用法如何递归及return和echo区别
2014/03/07 PHP
extjs 学习笔记(一) 一些基础知识
2009/10/13 Javascript
nodejs 实现模拟form表单上传文件
2014/07/14 NodeJs
WEB前端设计师常用工具集锦
2014/12/09 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
使用vue如何构建一个自动建站项目
2018/02/05 Javascript
在 React、Vue项目中使用SVG的方法
2018/02/09 Javascript
JavaScript中使用import 和require打包后实现原理分析
2018/03/07 Javascript
JavaScript常用截取字符串的三种方式用法区别实例解析
2018/05/15 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
详解Python with/as使用说明
2018/12/13 Python
python使用多线程编写tcp客户端程序
2019/09/02 Python
Python list运算操作代码实例解析
2020/01/20 Python
Tensorflow设置显存自适应,显存比例的操作
2020/02/03 Python
pandas使用函数批量处理数据(map、apply、applymap)
2020/11/27 Python
美国第二大团购网站:LivingSocial
2016/07/24 全球购物
NET程序员上机面试题
2015/05/23 面试题
潘婷洗发水广告词
2014/03/14 职场文书
七夕活动策划方案
2014/08/16 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
认错检讨书
2014/10/02 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
旗帜观后感
2015/06/08 职场文书
《秋天的怀念》教学反思
2016/02/17 职场文书
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
关于使用Redisson订阅数问题
2022/01/18 Redis
Java 数据结构七大排序使用分析
2022/04/02 Java/Android
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技