vuejs 制作背景淡入淡出切換動(dòng)畫的實(shí)例
安裝好vuejs之后,在components里添加Background.vue
代碼如下
<template> <div class="Background"> <div class="bg"> <transition v-bind:css="false" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave"> <img v-bind:src="showImg" v-if="show" /> </transition> </div> <div class="screen"></div> </div> </template> <script> export default { name: 'background', data () { return { imgs: [], isAnimate:false, showImg: "static/bg/0.jpg", showIndex: 0, show: true } }, mounted:function(){ this.$nextTick(function () { this.show=false; this.bg_data(); }); }, methods:{ bg_data: function(){ var _this = this; this.$http.get('static/data/bg.json').then(function(response){ _this.imgs = response.body; }); }, beforeEnter: function (name) { name.style.opacity=0; name.style.transform = "scale(1) rotate(0deg)"; }, enter: function (name, done) { var vm = this; Velocity(name, { opacity: 1 , scale: 1.2, rotateZ: "3deg"}, { duration: 6000, complete: function () { done(); vm.show = false; } } ); }, leave: function (name, done) { var vm = this; Velocity(name, { opacity: 0 , scale: 1, rotateZ: "0deg"}, { duration: 6000, complete: function () { done() vm.showImg = vm.imgs[vm.showIndex==6 ? vm.showIndex=0 : vm.showIndex+=1 ].imgURL; vm.show = true; } } ); } } } </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped> .bg{ position: fixed; left: 0px; top:0px; background-color: rgb(180, 180, 180); height: 100%; width: 100%; min-width: 1000px; z-index: -100; background-position: center 0; background-repeat: no-repeat; background-size: cover; -webkit-background-size: cover; -o-background-size: cover; zoom: 1; } img{ display: inline-block; position: relative; width: 100%; height: 100%; vertical-align: middle; z-index: -99; } .screen{ width: 100%; height: 100%; background-color: #444; z-index: -98; opacity: 0.8; filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=10); position: absolute; top: 0px; left: 0px; } </style>
圖片的json數(shù)據(jù)如下
[ { "fileName" : "0.jpg", "imgURL": "static/bg/0.jpg" }, { "fileName" : "1.jpg", "imgURL": "static/bg/1.jpg" }, { "fileName" : "2.jpg", "imgURL": "static/bg/2.jpg" }, { "fileName" : "3.jpg", "imgURL": "static/bg/3.jpg" }, { "fileName" : "4.jpg", "imgURL": "static/bg/4.jpg" }, { "fileName" : "5.jpg", "imgURL": "static/bg/5.jpg" }, { "fileName" : "6.jpg", "imgURL": "static/bg/6.jpg" } ]
如果路由不會(huì)的話看一下網(wǎng)上的資料
碰到的問題
1.在vue中想直接讓頁面加載時(shí)運(yùn)行函數(shù)的話將函數(shù)放在mounted對(duì)象里面。
2.函數(shù)放在methods 中
vue-resource用法 //用來獲取圖片的json數(shù)據(jù) this.$http.get(url).then(response =>{ console.log(response.body); },response =>{ console.log(response.body); }); }
4.用vue-resource時(shí)需要把
import VueResource from 'vue-resource' Vue.use(VueResource);
寫到main.js中去
5.mounted函數(shù)中,需要將運(yùn)行函數(shù)放在
this.$nextTick(function () { ......... })
中
6.在vue中用velocity-animate
npm install velocity-animate --save -dev
在main.js中加入
import Velocity from 'velocity-animate'
7.多圖片循環(huán)過度效果
這里研究了很久,頁面進(jìn)去之后會(huì)直接從leave函數(shù)開始運(yùn)行,不是想象的從beforeEnter開始。后來終于弄清楚為什么了,把show: true改成show: false,則可以讓頁面從beforeEnter前開始。
這個(gè)是參照vuejs的手冊(cè)的,http://cn.vuejs.org/v2/guide/transitions.html這里是關(guān)于過度效果的所有方面的東西。感覺能省很多代碼。
<div class="bg"> <transition v-bind:css="false" v-on:before-enter="beforeEnter" v-on:enter="enter" v-on:leave="leave"> <img v-bind:src="showImg" v-if="show" /> </transition> </div>
<script> export default { name: 'background', data () { return { imgs: [], isAnimate:false, showImg: "static/bg/0.jpg", showIndex: 0, show: true } }, mounted:function(){ this.$nextTick(function () { this.show=false; this.bg_data(); }); }, methods:{ bg_data: function(){ var _this = this; this.$http.get('static/data/bg.json').then(function(response){ _this.imgs = response.body; }); }, beforeEnter: function (name) { name.style.opacity=0; name.style.transform = "scale(1) rotate(0deg)"; }, enter: function (name, done) { var vm = this; Velocity(name, { opacity: 1 , scale: 1.2, rotateZ: "3deg"}, { duration: 6000, complete: function () { done(); vm.show = false; } } ); }, leave: function (name, done) { var vm = this; Velocity(name, { opacity: 0 , scale: 1, rotateZ: "0deg"}, { duration: 6000, complete: function () { done() vm.showImg = vm.imgs[vm.showIndex==6 ? vm.showIndex=0 : vm.showIndex+=1 ].imgURL; vm.show = true; } } ); } } } </script>
以上這篇vuejs 制作背景淡入淡出切換動(dòng)畫的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
如何使用Vue3構(gòu)建一個(gè)圖像畫廊(支持圖片上傳)
這篇文章主要給大家介紹了關(guān)于如何使用Vue3構(gòu)建一個(gè)圖像畫廊(支持圖片上傳)的相關(guān)資料,Vue畫廊這是vue編寫的圖庫應(yīng)用程序,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09vue獲取v-for異步數(shù)據(jù)dom的解決問題
這篇文章主要介紹了vue獲取v-for異步數(shù)據(jù)dom的解決問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03JavaScript獲取echart曲線上任意點(diǎn)位的值詳解
這篇文章主要為大家介紹了JavaScript獲取echart曲線上任意點(diǎn)位的值詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09Vue實(shí)現(xiàn)Google第三方登錄的示例代碼
本文記錄作者在vue項(xiàng)目中使用到Google第三方登錄,查詢到的資料文檔也不詳細(xì),故此把自己所遇到的坑及問題詳細(xì)的記錄下來。2021-07-07vue實(shí)現(xiàn)抽獎(jiǎng)效果Demo
這篇文章主要介紹了vue實(shí)現(xiàn)抽獎(jiǎng)效果Demo,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01純前端使用Vue3上傳文件到minio文件服務(wù)器(粘貼可直接用)
vue是目前最流行的前端框架,下面這篇文章主要給大家介紹了關(guān)于純前端使用Vue3上傳文件到minio文件服務(wù)器的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04