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实现按钮切换图片
Jan 20 Vue.js
vue keep-alive的简单总结
Jan 25 Vue.js
vue前端工程的搭建
Mar 31 Vue.js
Vue鼠标滚轮滚动切换路由效果的实现方法
Aug 04 Vue.js
如何用vue实现网页截图你知道吗
Nov 17 Vue.js
详解Vue router路由
Nov 20 Vue.js
Vue的生命周期一起来看看
Feb 24 Vue.js
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
vue配置型表格基于el-table拓展之table-plus组件
Apr 12 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
vue里使用create, mounted调用方法
Apr 26 Vue.js
vue实现登陆页面开发实践
May 30 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下连接ftp实现文件的上传、下载、删除文件实例代码
2010/06/03 PHP
PHP中使用register_shutdown_function函数截获fatal error示例
2015/04/21 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP页面静态化――纯静态与伪静态用法详解
2020/06/05 PHP
Javascript实现的分页函数
2006/12/22 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
JS限制上传图片大小不使用控件在本地实现
2012/12/19 Javascript
js中function()使用方法
2013/12/24 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
javascript实现漂亮的拖动层,窗口拖拽特效
2015/04/24 Javascript
Express的路由详解
2015/12/10 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
jquery $.trim()去除字符串空格的实现方法【附图例】
2016/03/30 Javascript
jQuery中deferred对象使用方法详解
2016/07/14 Javascript
jQuery插件echarts实现的去掉X轴、Y轴和网格线效果示例【附demo源码下载】
2017/03/04 Javascript
JavaScript 巧学巧用
2017/05/23 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
JavaScript插件Tab选项卡效果
2017/11/14 Javascript
vue计算属性computed、事件、监听器watch的使用讲解
2019/01/21 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
vue组件实现移动端九宫格转盘抽奖
2020/10/16 Javascript
原生JavaScript实现留言板
2021/01/10 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
Python操作json数据的一个简单例子
2014/04/17 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
2018/01/05 Python
Python工厂函数用法实例分析
2018/05/14 Python
Python实现树莓派摄像头持续录像并传送到主机的步骤
2020/11/30 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
Stokke美国官方网店:高级儿童家具、推车、汽车座椅和配件
2020/06/06 全球购物
酒店led欢迎词
2014/01/09 职场文书
写给医生的感谢信
2015/01/22 职场文书
思想品德课教学反思
2016/02/24 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL