vuejs 制作背景淡入淡出切换动画的实例
安装好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数据如下
[
{
"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"
}
]
如果路由不会的话看一下网上的资料
碰到的问题
1.在vue中想直接让页面加载时运行函数的话将函数放在mounted对象里面。
2.函数放在methods 中
vue-resource用法 //用来获取图片的json数据
this.$http.get(url).then(response =>{
console.log(response.body);
},response =>{
console.log(response.body);
});
}
4.用vue-resource时需要把
import VueResource from 'vue-resource' Vue.use(VueResource);
写到main.js中去
5.mounted函数中,需要将运行函数放在
this.$nextTick(function () {
.........
})
中
6.在vue中用velocity-animate
npm install velocity-animate --save -dev
在main.js中加入
import Velocity from 'velocity-animate'
7.多图片循环过度效果
这里研究了很久,页面进去之后会直接从leave函数开始运行,不是想象的从beforeEnter开始。后来终于弄清楚为什么了,把show: true改成show: false,则可以让页面从beforeEnter前开始。
这个是参照vuejs的手册的,http://cn.vuejs.org/v2/guide/transitions.html这里是关于过度效果的所有方面的东西。感觉能省很多代码。
<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 制作背景淡入淡出切换动画的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
详解mpvue scroll-view自动回弹bug解决方案
设置了scroll-top的scroll-view组件,在组件所在vue实例data发生改变时会自动回弹到最上方,非常具有实用价值,需要的朋友可以参考下2018-10-10
vue-cli单页面预渲染seo-prerender-spa-plugin操作
这篇文章主要介绍了vue-cli单页面预渲染seo-prerender-spa-plugin操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-08-08
vue2.0+vuex+localStorage代办事项应用实现详解
本篇文章给大家分享了一个用vue2.0+vuex+localStorage代办事项应用实现的代码过程,有兴趣的朋友跟着参考学习下。2018-05-05
使用proxytable 配置解决 vue-cli 的跨域请求问题【推荐】
这篇文章主要介绍了利用 proxytable 配置解决 vue-cli 的跨域请求问题,本文的目录结构基于 webpack 模板结构,需要的朋友可以参考下2018-05-05
详解Vue+ElementUI从零开始搭建自己的网站(一、环境搭建)
这篇文章主要介绍了Vue+ElementUI从零开始搭建自己的网站(一、环境搭建),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-04-04
代替Vue Cli的全新脚手架工具create vue示例解析
这篇文章主要为大家介绍了代替Vue Cli的全新脚手架工具create vue示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-10-10


最新评论