zoukankan      html  css  js  c++  java
  • Vue项目笔记

    这都是使用Vue做项目的时候,发现的知识点,现在记录下来

    1、单元素/组件的过渡   transition  

    API: https://cn.vuejs.org/v2/guide/transitions.html

    Vue 提供了 transition 的封装组件,在下列情形中,可以给任何元素和组件添加进入/离开过渡

    • 条件渲染 (使用 v-if)
    • 条件展示 (使用 v-show)
    • 动态组件
    • 组件根节点

    当触发条件展示和条件渲染的时候,如果给元素包裹在transition组件中,那么就会触发transition效果

    下面有一个例子:

    <div class="ball-container">
            <div v-for="(ball,index) in balls" :key="index">
              <transition
                @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>
    
    beforeDrop(el) {
            const ball = this.dropBalls[this.dropBalls.length - 1]
            const rect = ball.el.getBoundingClientRect()
            const x = rect.left - 32
            const y = -(window.innerHeight - rect.top - 22)
            el.style.display = ''
            el.style.transform = el.style.webkitTransform = `translate3d(0,${y}px,0)`
            const inner = el.getElementsByClassName(innerClsHook)[0]
            inner.style.transform = inner.style.webkitTransform = `translate3d(${x}px,0,0)`
          },
          dropping(el, done) {
            this._reflow = document.body.offsetHeight
            el.style.transform = el.style.webkitTransform = `translate3d(0,0,0)`
            const inner = el.getElementsByClassName(innerClsHook)[0]
            inner.style.transform = inner.style.webkitTransform = `translate3d(0,0,0)`
            el.addEventListener('transitionend', done) // 当只用 JavaScript 过渡的时候,在 enter 和 leave 中必须使用 done 进行回调
          },
          afterDrop(el) {
            const ball = this.dropBalls.shift()
            if (ball) {
              ball.show = false
              el.style.display = 'none'
            }
          },
    
    

    2、getBoundingClientRect()方法

    https://developer.mozilla.org/zh-CN/docs/Web/API/Element/getBoundingClientRect

    Element.getBoundingClientRect()方法返回元素的大小及其相对于视口的位置。

    具有四个属性left、top、right、bottom

    3、data里定义的元素可以用函数function来赋值

     4、组件里面,如果定义的元素只是为了存储,而不需要有set/get方法,那就不需要在data里面定义,可以在created()里面定义

     5、在Vue 里面,进行过度动画,一个动画结束,开始另一个动画的时候,要先重绘

    例子:

    <div class="ball-container">
            <div v-for="(ball,index) in balls" :key="index">
              <transition
                @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>
    beforeDrop(el) {
            const ball = this.dropBalls[this.dropBalls.length - 1]
            const rect = ball.el.getBoundingClientRect()
            const x = rect.left - 32
            const y = -(window.innerHeight - rect.top - 22)
            el.style.display = ''
            el.style.transform = el.style.webkitTransform = `translate3d(0,${y}px,0)`
            const inner = el.getElementsByClassName(innerClsHook)[0]
            inner.style.transform = inner.style.webkitTransform = `translate3d(${x}px,0,0)`
          },
          dropping(el, done) {
            // 当一个动画完成,进行下一个动画的时候,要先重绘
            this._reflow = document.body.offsetHeight
            el.style.transform = el.style.webkitTransform = `translate3d(0,0,0)`
            const inner = el.getElementsByClassName(innerClsHook)[0]
            inner.style.transform = inner.style.webkitTransform = `translate3d(0,0,0)`
            el.addEventListener('transitionend', done)
          },
          afterDrop(el) {
            const ball = this.dropBalls.shift()
            if (ball) {
              ball.show = false
              el.style.display = 'none'
            }
    }

     完整例子在这:https://github.com/zhaobao1830/vue-eleme-new

    shop-cart.vue组件

    6、动画效果

    动画流程:当动画逛好要执行的时候,Vue会给内部的div增加俩个class(fade-enter、fade-enter-active);当动画第一帧执行结束之后,会把之前添加的fade-enter去掉,添加fade-enter-to;

    接着动画会继续执行,执行结束后,把fade-enter-active和fade-enter-to去掉

     7、使用cube-slide引入本地静态图片,要使用require

    slideItems: [
              {
                url: '#',
                image: require('./slide_1.png')
              },
              {
                url: '#',
                image: require('./slide_2.png')
              },
              {
                url: '#',
                image: require('./slide_3.png')
              }
            ]

    不过我还是推荐把图片放到服务器上

  • 相关阅读:
    【转帖】asp.net mvc与webform区别
    [学习jquery]深入了解jquery(1)jquery对象
    windows ce 4.2/5.0/6.0/windows mobile设备直接连接PC端的SQLserver
    dotNet dispose 和 close的区别
    简易快速理解 ERP
    互联网盈利模式77种创新 [转]
    软件开发的基础知识[1]
    什么是 SHTML
    ASP.NET 2.0:弃用 DataGrid 吧,有新的网格控件了![msdn]
    主页制作五十式[好帖就要转]
  • 原文地址:https://www.cnblogs.com/zhaobao1830/p/10136022.html
Copyright © 2011-2022 走看看