vue动画

一、vue动画

1、使用transition定义动画

//定义过渡的样式
/*动画刚开始时的状态,动画结束时的状态*/
.move-enter-active,.move-leave-active{
	transition:all 2s;
}
/*动画过渡的css样式*/
.move-enter,.move-leave-to{
	opacity:0;
	transform:translateX(150px);
}

//使用vue中的transition动画组件
<transition name="move">
	<h2 v-if="show" class="title">Hello world...</h2>
</transition>


//创建vue的实例
     new Vue({
        el: ".box",
        data: {
            show: true
        },
        methods: {
            toggle() {
                this.show = !this.show
            }
        }
    })

2、结合animate.css动画库定义transition动画

  • 使用transition组件,并且定义动画进入(enter-active)时的类名和动画离开(leave-active)时的类名

      <div class="box">
           <transition name="myblock" enter-active-class="animated bounceInRight" leave-active-class="animated bounceOutLeft">
               <div v-if="show" class="block"></div>
           </transition>
          <button @click="toggle">切换</button>
     	</div>
    
  • 创建vue实例改变元素的显示与隐藏从而触发动画效果

      new Vue({
      	el: ".box",
          data: {
               show: true
          },
          methods: {
               toggle() {
                    this.show = !this.show
               }
         }              
     	})
    

3、监听vue动画的过渡事件

  • 使用transition定义动画

      <div class="box">
           <transition name="myblock" enter-active-class="animated bounceInRight" 
                  leave-active-class="animated bounceOutLeft" 
                  @before-enter="beforeEnter"     <!--动画进入前-->
                  @enter="enter"                  <!--动画开始进入-->
                  @after-enter="afterEnter"       <!--动画进入后-->
                  @before-leave="beforeLeave"     <!--动画离开前-->
                  @leave="leave"                  <!--动画进开始离开-->
                  @after-leave="afterLeave">      <!--动画离开后-->
                  <div v-if="show" class="block"></div>   <!--动画进入前-->
           </transition>
           <button @click="toggle">切换</button>
     	</div>
    
  • 创建vue实例

      new Vue({
          el: ".box",
          data: {
               show: true
          },
          methods: {
              toggle() {
                  this.show = !this.show
              },
              beforeEnter() {
                   alert("开始动画之前.....")
              },
              enter() {
                   alert("动画开始......")
              },
              afterEnter() {
                   alert("动画结束......")
              },
              beforeLeave(){
                   alert("离开之前")
              },
              leave(){
                   alert("即将要离开....")
              },
              afterLeave(){
                   alert("离开已经结束")
              }
          }
       })
    

二、vue-router

1、为什么要使用vue-router?

  • 实现SPA(single page application 减少客户端和服务器之间请求加载时间)

      <body>
      	<div class="box">
      		<h1>vue-router使用</h1>
      		<!-- 创建单页应用的导航 -->
      		<nav>
      			<!-- vue-router的导航链接 -->
      			<router-link to="/">主页</router-link>
      			<router-link to="/hot">热门话题</router-link>
      			<router-link to="/tech">科技动态</router-link>
      			<router-link to="/dev">开发者资讯</router-link>
      		</nav>
      		<!-- 页面中需要根据导航切换的内容的容器 -->
      		<router-view></router-view>	
      	</div>
      	
      	<script src="./js/vue.js"></script>
      	<script src="./js/vue-router.js"></script>
      	<script>
      		// 定义不同的路由切换时需要显示的内容
      
      		// var Hot={template:"<h1>这是热门话题部分</h1>"}
      		// var Tech={template:"<h1>这是科技动态部分</h1>"}
      		// var Dev={template:"<h1>这是开发者资讯部分</h1>"}
      
      		var Index=Vue.component("Index",{
      			template:"<h1>这是主页部分</h1>"
      		})
      		var Hot=Vue.component("Hot",{
      			template:"<h1>这是热门话题部分</h1>"
      		})
      		var Tech=Vue.component("Tech",{
      			template:"<h1>这是科技动态部分</h1>"
      		})
      		var Dev=Vue.component("Dev",{
      			template:"<h1>这是开发者资讯部分</h1>"
      		})
      
      		//配置路由规则
      		var routes=[{
      			path:"/",
      			component:Index
      		},{
      			path:"/hot",
      			component:Hot
      		},{
      			path:"/tech",
      			component:Tech
      		},{
      			path:"/dev",
      			component:Dev
      		}]
      
      		//创建vue-router的实例
      		var router = new VueRouter({
      			routes:routes
      		})
      
      		//最后将vue-router的实例挂载到vue的实例
      		new Vue({
      			el:".box",
      			router:router
      			
      		})
      	</script>
      </body>
    

2、如何使用vue-router

  • 公用style样式

      <style>
      	*{
      		margin:0;
      		padding:0;
      	}
      	body{
      		font-size:15px;
      	}
      	nav{
      		width: 100%;
      		height: 45px;
      		font-size:0;
      	}
      	nav>a{
      		display:inline-block;
      		height: 45px;
      		width:25%;
      		line-height:45px;
      		box-sizing:border-box;
      		text-align:center;
      		font-size:18px;
      	}
      	.content{
      		border:1px solid skyblue ;
      		text-align:center;
      		min-height:400px;
      	}
      </style>
    

01、vue-router路由传参

  • html结构

      <div class="container">
      	<h1 class="text-center text-muted">vue-router使用</h1>
      	<!-- 创建单页应用的导航 -->
      	<nav>
      		<!-- vue-router的导航链接 -->
      	
      		<router-link to="/AI">热门话题</router-link>
      		<router-link to="/tech">科技动态</router-link>
      		<router-link to="/dev/js/3">开发者资讯</router-link>
      		<router-link to="/user?name=张三&age=22">用户中心</router-link>
      	</nav>
      	<!-- 页面中需要根据导航切换的内容的容器 -->
      	<div class="content">
      		<router-view></router-view>	
      	</div>
      	
      </div>
    
  • script结构

      <script src="./js/vue.js"></script>
      <script src="./js/vue-router.js"></script>
      <script>
      	// 1、定义不同的路由切换时需要显示的内容
      	
      	var Hot=Vue.component("Hot",{
      		template:"<h1>这是热门话题部分,{{$route.params.type}}</h1>",
      		created:function(){
      			alert("话题类型:"+this.$route.params.type)
      		}
      	})
      	var Tech=Vue.component("Tech",{
      		template:"<h1>这是科技动态部分</h1>"
      	})
      	var Dev=Vue.component("Dev",{
      		template:"<h1>这是开发者资讯部分,获取文章的类型:{{$route.params.type}},获取文章的页码:{{$route.params.page}}</h1>"
      	})
      	var User=Vue.component("User",{
      		template:"<div><h1>这是用户中心,{{$route.query.name}},{{$route.query.age}}</h1></div>"
      	})
    
    
      	//2、配置路由规则
      	var routes=[{
      		path:"/:type",
      		component:Hot
      	},{
      		path:"/tech",
      		component:Tech
      	},{
      		path:"/dev/:type/:page",
      		component:Dev
      	},{
      		path:"/user",
      		component:User
      	}]
    
      	//3、创建vue-router的实例
      	var router = new VueRouter({
      		routes:routes
      	})
    
      	//4、最后将vue-router的实例挂载到vue的实例
      	new Vue({
      		el:".container",
      		router
      		
      	})
      </script>
    

02、vue-router路由嵌套

  • html结构

      <div class="container">
      	<h1 class="text-center text-muted">vue-router使用</h1>
      	<!-- 创建单页应用的导航 -->
      	<nav>
      		<!-- vue-router的导航链接 -->
      	
      		<router-link to="/">热门话题</router-link>
      		<router-link to="/tech">科技动态</router-link>
      		<router-link to="/dev">开发者资讯</router-link>
      		<router-link to="/user">用户中心</router-link>
      	</nav>
      	<!-- 页面中需要根据导航切换的内容的容器 -->
      	<div class="content">
      		<router-view></router-view>	
      	</div>
      	
      </div>
      <template id="user">
      	<div>
      		<h1>这是用户中心</h1>
      		<p>
      			<router-link  class="btn btn-primary" to="/user/login">登录</router-link>
      			<router-link  class="btn btn-success" to="/user/reg">注册</router-link>
      		</p>
      	</div>
      </template>
    
  • script结构

      <script src="./js/vue.js"></script>
      <script src="./js/vue-router.js"></script>
      <script>
      	// 1、定义不同的路由切换时需要显示的内容
      	
      	var Hot=Vue.component("Hot",{
      		template:"<h1>这是热门话题部分</h1>",
      		
      	})
      	var Tech=Vue.component("Tech",{
      		template:"<h1>这是科技动态部分</h1>"
      	})
      	var Dev=Vue.component("Dev",{
      		template:"<h1>这是开发者资讯部分</h1>"
      	})
      	var User=Vue.component("User",{
      		template:"#user"
      	})
    
      	//定义登录组件
      	var Login=Vue.component("Login",{
      		template:"<h1 class='text-center'>这是登录组件</h1>"
      	})
      	var Reg=Vue.component("Reg",{
      		template:"<h1 class='text-center'>这是登录组件</h1>"
      	})
    
      	var NotFound=Vue.component("Error",{
      		template:"<h1 class='text-center'>404 Page Not Found!</h1>"
      	})
    
      	//2、配置路由规则
      	var routes=[{
      		path:"/",
      		component:Hot
      	},{
      		path:"/tech",
      		component:Tech
      	},{
      		path:"/dev",
      		component:Dev
      	},{
      		path:"/user",
      		component:User,
      		//配置子路由的路由规则
      		children:[{
      			path:"",
      			component:Login
      		},{
      			path:"reg",
      			component:Reg
      		}]
      	},{
      		path:"*",
      		component:Error
      	}]
    
      	//3、创建vue-router的实例
      	var router = new VueRouter({
      		routes:routes
      	})
    
      	//4、最后将vue-router的实例挂载到vue的实例
      	new Vue({
      		el:".container",
      		router
      		
      	})
      </script>
    

03、vue-router路由跳转的监听

  • html结构

      <div class="container">
      	<h1 class="text-center text-muted">vue-router使用</h1>
      	<!-- 创建单页应用的导航 -->
      	<nav>
      		<!-- vue-router的导航链接 -->
      	
      		<router-link to="/">热门话题</router-link>
      		<router-link to="/tech">科技动态</router-link>
      		<router-link to="/dev">开发者资讯</router-link>
      		<router-link to="/user?name=Alice">用户中心</router-link>
      	</nav>
      	<!-- 页面中需要根据导航切换的内容的容器 -->
      	<div class="content">
      		<router-view></router-view>	
      	</div>
      	
      </div>
      <template id="user">
      	<div>
      		<h1>这是用户中心</h1>
      		<p>
      			<router-link  class="btn btn-primary" to="/user/">登录</router-link>
      			<router-link  class="btn btn-success" to="/user/reg">注册</router-link>
      		</p>
      		<router-view></router-view>
      	</div>
      </template>
    
  • script结构

      <script src="./js/vue.js"></script>
      <script src="./js/vue-router.js"></script>
      <script>
      	// 1、定义不同的路由切换时需要显示的内容
      	
      	var Hot=Vue.component("Hot",{
      		template:"<h1>这是热门话题部分</h1>",
      		
      	})
      	var Tech=Vue.component("Tech",{
      		template:"<h1>这是科技动态部分</h1>"
      	})
      	var Dev=Vue.component("Dev",{
      		template:"<h1>这是开发者资讯部分</h1>"
      	})
      	var User=Vue.component("User",{
      		template:"#user"
      	})
    
      	//定义登录组件
      	var Login=Vue.component("Login",{
      		template:"<h1 class='text-center'>这是登录组件</h1>"
      	})
      	var Reg=Vue.component("Reg",{
      		template:"<h1 class='text-center'>这是登录组件</h1>"
      	})
    
      	var Error=Vue.component("Error",{
      		template:"<h1 class='text-center'>404 Page Not Found!</h1>"
      	})
    
      	//2、配置路由规则
      	var routes=[{
      		//name代表组件的名称
      		name:"主页",
      		path:"/",
      		component:Hot
      	},{
      		name:"科技动态",
      		path:"/tech",
      		component:Tech
      	},{
      		name:"开发者资讯",
      		path:"/dev",
      		component:Dev
      	},{
      		path:"/user",
      		component:User,
      		//配置子路由的路由规则
      		children:[{
      			name:"登录",
      			path:"",
      			component:Login
      		},{
      			name:"注册",
      			path:"reg",
      			component:Reg
      		}]
      	},{
      		path:"*",
      		component:Error
      	}]
    
      	//3、创建vue-router的实例
      	var router = new VueRouter({
      		routes:routes
      	})
    
      	//4、最后将vue-router的实例挂载到vue的实例
      	new Vue({
      		el:".container",
      		router:router,
      		watch:{
      			"$route":function(target,current){
      				//target代表路由即将要跳转到的目标路径
      				//current代表当前路由路径
      				console.log("路由即将要跳转至-->",target)
      				console.log("当前路由路径是-->",target)
      			}
      		}
      		
      	})
      </script>
    

3、vue-cli

posted @ 2017-11-08 19:34  不完美的完美  阅读(1193)  评论(0编辑  收藏  举报