国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > JavaScript > 正文

vue實(shí)現(xiàn)頁(yè)面加載動(dòng)畫(huà)效果

2019-11-19 15:23:18
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

我們經(jīng)常看到數(shù)據(jù)未出現(xiàn)時(shí),頁(yè)面中會(huì)有一條提示消息, 頁(yè)面正在加載中,如何實(shí)現(xiàn)該效果呢 ,請(qǐng)看下面代碼

<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}">  <div :class="{'all-center': option.isCenter}">   <slot></slot>  </div> </section> <section class="page" v-else>頁(yè)面正在渲染中。。。</section></template>

有木有感覺(jué)很簡(jiǎn)單
下面上點(diǎn)干貨,實(shí)現(xiàn)頁(yè)面的動(dòng)畫(huà)效果

<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  //是否開(kāi)啟滾動(dòng)循環(huán)  } } }, 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) {  // 防止重復(fù)觸發(fā)滾動(dòng)事件  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')) {  // 監(jiān)聽(tīng)滾輪事件  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); } // 移動(dòng)端觸摸事件處理 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>

本文已被整理到了《Vue.js前端組件學(xué)習(xí)教程》,歡迎大家學(xué)習(xí)閱讀。

關(guān)于vue.js組件的教程,請(qǐng)大家點(diǎn)擊專題vue.js組件學(xué)習(xí)教程進(jìn)行學(xué)習(xí)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 武夷山市| 乐都县| 化州市| 通海县| 湟源县| 盈江县| 安宁市| 永新县| 台南县| 新民市| 新平| 望谟县| 广平县| 虎林市| 柘城县| 鄱阳县| 剑河县| 南和县| 吉木乃县| 广灵县| 昂仁县| 平定县| 句容市| 大庆市| 塔城市| 津市市| 兴化市| 富川| 祁东县| 永平县| 沽源县| 建阳市| 兰西县| 梁山县| 清苑县| 平舆县| 阳东县| 陕西省| 元阳县| 兴安盟| 潢川县|