• 技术文章 >web前端 >js教程

    vue实现页面加载动画代码教程

    小云云小云云2018-02-05 16:24:28原创1025
    我们经常看到数据未出现时,页面中会有一条提示消息, 页面正在加载中,如何实现该效果呢 ,本文主要为大家详细介绍了vue实现页面加载动画效果,vue页面出现正在加载的初始页面与实现动画效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能帮助到大家。

    请看下面代码


    <template>
     <section class="page" v-if="option" 
      :style="{background: option.background,color: option.color||'#fff'}"  
      :class="{'page-before': option.index < currentPage,
        'page-after': option.index > currentPage,
        'page-current': option.index === currentPage}">
      <p :class="{'all-center': option.isCenter}">
       <slot></slot>
      </p>
     </section>
     <section class="page" v-else>页面正在渲染中。。。</section>
    </template>

    有木有感觉很简单
    下面上点干货,实现页面的动画效果


    <template>
     <nav class="controller">
      <button v-if="option.arrowsType" class="prev-btn" :class="{moving:option.arrowsType === 'animate'}" @click="changePage(prevIndex)"></button>
      <ul v-if="option.navbar">
       <li v-for="index in pageNum" @click="changePage(index)" :class="{current:option.highlight && index === currentPage}" :key="'controller-'+index" :data-index="index" class="controller-item"></li>
      </ul>
      <button v-if="option.arrowsType" class="next-btn" :class="{moving:option.arrowsType === 'animate'}" @click="changePage(nextIndex)"></button>
     </nav>
    </template>
    
    <script>
    export default {
     name: 'page-controller',
     props: {
     pageNum: Number,
     currentPage: Number,
     option: {
      type: Object,
      default: {
      arrowsType: 'animate',
      navbar: true,
      highlight: true,
      loop: true  //是否开启滚动循环
      }
     }
     },
     methods: {
     changePage (index) {
      this.$emit('changePage', index);
     }
     },
     computed: {
     nextIndex () {
      if (this.currentPage === this.pageNum) {
      if(this.option.loop){
       return 1
       }else{
       return this.pageNum
       }
      } else {
      return this.currentPage + 1;
      }
     },
     prevIndex () {
      if (this.currentPage === 1) {
      if(this.option.loop){
       return this.pageNum
       }else{
       return 1
       }
      } else {
      return this.currentPage - 1;
      }
     }
     },
     created () {
     if (this.option.navbar === undefined) {
      this.option.navbar = true;
     }
     },
     mounted () {
     let _this = this;
     let timer = null;
     let start = 0;
     // 滚轮处理
     function scrollHandler (direction) {
      // 防止重复触发滚动事件
      if (timer != null) {
      return;
      }
      if (direction === 'down') {
      _this.changePage(_this.nextIndex);
      } else {
      _this.changePage(_this.prevIndex);
      }
      timer = setTimeout(function() {
      clearTimeout(timer);
      timer = null;
      }, 300);
     }
     // if (Object.hasOwnProperty.call(window,'onmousewheel')) {
     if (Object.hasOwnProperty.call(window,'onmousewheel')) {
      // 监听滚轮事件
      window.addEventListener('mousewheel',function (event) { // IE/Opera/Chrome
      let direction = event.wheelDelta > 0 ? 'up':'down';
      scrollHandler(direction);
      },false);
     } else {
      window.addEventListener('DOMMouseScroll',function (event) { // Firefox
      let direction = event.detail > 0 ? 'up':'down';
      scrollHandler(direction);
      },false);
     }
     // 移动端触摸事件处理
     window.addEventListener('touchstart', function (event) {
      start = event.touches[0].clientY;
     })
     window.addEventListener('touchmove', function (event) {
      event.preventDefault();
     })
     window.addEventListener('touchend', function (event) {
      let spacing = event.changedTouches[0].clientY - start;
      let direction;  
      if (spacing > 50) {
      direction = 'up';
      scrollHandler(direction);
      } else if (spacing < -50) {
      direction = 'down';
      scrollHandler(direction);
      }
     })
     }
    }
    </script>
    
    <style scoped>
    .controller {
     position: fixed;
     right: 20px;
     top: 50%;
     z-index: 99;
    }
    .controller ul {
     transform: translate3d(0,-50%,0);
     list-style: none;
     margin: 0;
     padding: 0;
    }
    .controller-item {
     cursor: pointer;
     width: 20px;
     height: 20px;
     border-radius: 50%;
     margin-top: 10px;
     background-color: rgba(255, 255, 255, 0.3);
     transition: background-color 0.3s ease 0s;
    }
    .controller-item:hover {
     background-color: rgba(255, 255, 255, 0.7);
    }
    .controller-item.current {
     background-color: rgba(255, 255, 255, 1);
    }
    .prev-btn,.next-btn {
     cursor: pointer;
     display: block;
     text-align: center;
     width: 20px;
     height: 20px;
     position: fixed;
     left: 50%;
     margin-left: -10px;
     border: 4px solid #fff;
     background-color: transparent;
     outline: none;
    }
    .prev-btn {
     top: 80px;
     transform: rotate(-45deg);
     border-bottom-color: transparent;
     border-left-color: transparent;
    }
    .next-btn {
     bottom: 80px;
     transform: rotate(45deg);
     border-top-color: transparent;
     border-left-color: transparent;
    }
    .prev-btn.moving {
     animation: prev-up-down 0.7s linear 0s infinite;
    }
    .next-btn.moving {
     animation: next-up-down 0.7s linear 0s infinite;
    }
    @keyframes next-up-down {
     0% {
     transform: translate3d(0,0,0) rotate(45deg);
     }
     25% {
     transform: translate3d(0,6px,0) rotate(45deg);
     }
     50% {
     transform: translate3d(0,0,0) rotate(45deg);
     }
     75% {
     transform: translate3d(0,-6px,0) rotate(45deg);
     }
     100% {
     transform: translate3d(0,0,0) rotate(45deg);
     }
    }
    @keyframes prev-up-down {
     0% {
     transform: translate3d(0,0,0) rotate(-45deg);
     }
     25% {
     transform: translate3d(0,-6px,0) rotate(-45deg);
     }
     50% {
     transform: translate3d(0,0,0) rotate(-45deg);
     }
     75% {
     transform: translate3d(0,6px,0) rotate(-45deg);
     }
     100% {
     transform: translate3d(0,0,0) rotate(-45deg);
     }
    }
    </style>

    相关推荐:

    页面加载时触发的事件及顺序

    php简单计算页面加载时间

    HTML页面加载速度加快的介绍

    以上就是vue实现页面加载动画代码教程的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:代码 动画 加载
    上一篇:JavaScript原生态兼容IE6可调控滚动文字功能 下一篇:Node 、Git 、Webhook自动化部署实例详解
    千万级数据并发解决方案

    相关文章推荐

    • angular学习之路由模块浅析• JavaScript怎么实现基础类型和对象一样有属性和方法• 值得了解的几个实用JavaScript优化小技巧• JavaScript学习理解之JSON(总结分享)• 深入了解JavaScript的内存与性能问题
    1/1

    PHP中文网