基于vue的仿饿了么关于小球动画第一次出现

这几天看到了基于vue仿饿了么购物车小球动画这一章,我的项目是基于vue2.x写的,所以视频里基于vue1.x的写法不适合我,于是按照文档改成了2.x版本的写法,这个动画的方式采用两层,一层是.ball的运动,一层是.inner的运动,可以将其写成一层只有.ball运动的写法,只需改变部分代码就行了,代码在注释里,记得样式代码也要改。

刚开始将视频里的代码改成了如下格式:

<div class="ball-container">
        <transition-group name="drop" 
          @before-enter="beforeEnter"
          @enter="enter"
          @after-enter="afterEnter">
          <div class="ball"  v-for="(ball,index) in balls" v-bind:key="index" v-show="ball.show">
            <div class="inner inner-hook"></div>
          </div>
        </transition-group>
      </div>

transition-group是vue文档中用于列表过渡的,在这里的小球虽然是用v-for遍历出来的,但是运动时候还是单个单个的运动,用transition-group是可以写出来的,还是将它改成了如下代码,使之成为单个运动的方式:

<div class="ball-container" v-for="ball in balls">
       <transition 
          v-on:before-enter="beforeEnter"
          v-on:enter="enter"
          v-on:after-enter="afterEnter"
          name="drop">
         <div class="ball" v-show="ball.show">
             <div class="inner inner-hook">
             </div>
         </div>
       </transition>
    </div>

stylus代码如下:

.ball-container
      .ball
        position: fixed
        left: 32px
        bottom: 22px
        z-index: 200
        transition: all 0.4s linear
        .inner
          width: 16px
          height: 16px
          border-radius: 50%
          background: rgb(0, 160, 220)
          transition: all 0.4s linear

js代码如下,注意:
v-on:before-enter=”beforeEnter”
v-on:enter=”enter”
v-on:after-enter=”afterEnter”这是触发钩子函数的代码,必须要,具体的方法写在methods里:

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;
         }
       } 
    },
    beforeEnter: function (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);
          /*注释部分为动画为一层时代码*/
           /*el.style.display = '';*/
           /*el.style.webkitTransform=`translate3d(${x}px,${y}px,0)`;*/
           /*el.style.transform = `translate3d(${x}px, ${y}px, 0)`;*/

          el.style.display = '';
          el.style.webkitTransform = `translate3d(0, ${y}px, 0)`;
          el.style.transform = `translate3d(0, ${y}px, 0)`;
          /*内层动画(这个动画在这里被分成两层,也可以一层)*/
          let inner = el.getElementsByClassName('inner-hook')[0];
          inner.style.webkitTransform = `translate3d(${x}px, 0, 0)`;
          inner.style.transform = `translate3d(${x}px, 0, 0)`;
        }
      }
    },
    enter: function (el, done) {
      /* eslint-disable no-unused-vars */ 
      let rf = el.offsetHeight;                 /*触发浏览器重绘;*/
      this.$nextTick(() => {
        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);
      });
    },
    afterEnter: function (el) {
       let ball = this.dropBalls.shift();
       if (ball) {
           ball.show = false;
           el.style.display = 'none';
       }
    }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Vue仿饿了么地址选择定位功能可以通过以下步骤实现: 1. 引入相关组件和插件:在Vue项目中引入element-ui组件库,并且可以使用其提供的el-dialog、el-form、el-input等组件来实现地址选择和定位的界面展示。 2. 设计界面布局:使用Vue的模板语法和element-ui组件来设计地址选择和定位的界面布局,可以使用el-dialog组件作为地址选择的弹出框,el-form和el-input组件用来输入和展示地址信息。 3. 与地图API进行交互:Vue项目中可以使用第三方地图API,比如百度地图API或者高德地图API等,通过调用相关API,可以实现地址的定位和地图展示。 4. 实现地址选择和定位功能:在地址选择弹出框中,提供省市区、详细地址等输入框,并且可以使用el-input组件的自动补全功能来实现地址的快速输入。同时,在界面上可以显示一个地图的容器,并且通过地图API根据用户输入的地址进行定位,并在地图上展示定位结果。 5. 数据交互和保存:用户选择完地址后,可以将地址信息保存到vuex状态管理中,方便其他组件共享和使用。同时也可以将地址信息传递给后端服务器,进行相关的业务操作,比如用户下单等。 通过以上步骤的实现,就可以在Vue项目中仿饿了么的地址选择定位功能。当用户需要选择地址时,通过点击按钮或者其他交互方式,弹出地址选择框,用户可以输入地址信息并选择定位,显示在界面上,并且可以实现地址的保存和交互。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值