js过渡效果_干货 | Vue事件、过渡和制作index页面
最近在学习使用Vue作为前端的框架,本文简单介绍Vue的过渡效果,以及记录制作首页的过程。
”
Vue事件
1方法处理器
● 可以用v-on指令监听DOM事件
● 类似于内联表达式,事件处理器限制为一个语句
● 当一个ViewModel被销毁时,所有的事件处理器都会自动被删除
● 有时也需要在内联语句处理器中访问原生DOM事件,可以用特殊变量$event把它传入方法
<button v-on:click="say('hello!', $event)">Submitbutton>
2事件修饰符
Vue封装了常用的事件处理:
● .prevent: event.preventDefault()
● .stop: event.stopPropagation()
3按键修饰符
在监听键盘事件时,我们经常需要检测keyCode。
on:keyup.13="submit">
Vue过渡
通过Vue.js的过渡系统,可以在元素从DOM中插入或移除时自动应用过渡效果。
Vue.js会在适当的时机为你触发CSS过渡或动画,你也可以提供相应的JavaScript钩子函数在过渡过程中执行自定义的DOM操作。
1使用过渡
在目标元素上使用transition特性。transition 特性可以与下面资源一起用:
● v-if
● v-show
● v-for(只在插入和删除时触发,使用vue-animated-list插件)
● 动态组件(is和切换组件)
● 在组件的根节点上,并且被Vue实例DOM方法(如vm.$appendTo(el))触发
当插入或删除带有过渡的元素时,Vue 将:
1. 尝试查找JavaScript过渡钩子对象——通过Vue.transition(id, hooks)或transitions选项注册,将在过渡的不同阶段调用相应的钩子。
2. 自动嗅探目标元素是否有CSS过渡或动画,并在合适时添加/删除CSS类名。
3. 如果没有找到JavaScript钩子并且也没有检测到CSS过渡/动画,DOM操作(插入/删除)在下一帧中立即执行。
2CSS过渡
● 过渡的CSS类名
● .name-transition: 始终保留在元素上
● .name-enter: 定义进入过渡的开始状态。只应用一帧然后立即删除
● .name-leave: 定义离开过渡的结束状态。在离开过渡开始时生效,在它结束后删除,当然配合css3的帧动画效果会更好。
我们这里的菜单展开/收起用的CSS过渡。
在目标元素上使用transition特性
<li v-for="item in menu.menus" v-show="menu.show" transition="staggered">{{ item.text }}li>
为.staggered-transition,.staggered-enter和.staggered-leave添加CSS规则:
.staggered-transition { transition: all .2s ease-in-out; overflow: hidden; margin: 0; height: 50px;}.staggered-enter, .staggered-leave { height: 0px; opacity: 0; padding: 0;}
3JavaScript过渡
可以只使用JavaScript钩子,不用定义任何CSS规则。
当只使用JavaScript过渡时,enter和leave钩子需要调用done回调,否则它们将被同步调用,过渡将立即结束。
Vue.transition('fade', { css: false, // Vue.js将跳过CSS检测 enter: function (el, done) { // 元素已被插入 DOM // 在动画结束后调用 done $(el) .css('opacity', 0) .animate({ opacity: 1 }, 1000, done) }, enterCancelled: function (el) { $(el).stop() }, leave: function (el, done) { // 与 enter 相同 $(el).animate({ opacity: 0 }, 1000, done) }, leaveCancelled: function (el) { $(el).stop() }})
然后用在transition特性中。
4渐变过渡
transition与v-for一起用时可以创建渐近过渡。
给过渡元素添加一个特性
stagger,enter-stagger或 eave-stagger
<div v-for="item in list" transition="stagger" stagger="100">div>
提供一个钩子stagger, enter-stagger或leave-stagger,以更好的控制
Vue.transition('stagger', { stagger: function (index) { // 每个过渡项目增加50ms延时 // 但是最大延时限制为300ms return Math.min(300, index * 50) }})
制作index页面
页面结构如下:
1添加模板
这里使用了上一节创建的头部组件,在component属性中引入。
<template> <div is="my-header" current="index">div> <div class="container-fluid row"> <aside class="col-md-2 col-md-offset-1" id="according"> <div class="panel-group" id="accordion" role="tablist" aria-multiselectable="true"> <div class="panel panel-default list-group" v-for="menu in asidemenus"> <div class="panel-heading" role="tab"> <ul class="panel-title "> <li data-toggle="collapse" v-on:click="toggleContent($index)"> {{ menu.title }} li> ul> div> <div class="panel-collapse collapse in"> <ul class="list-group"> <li v-for="item in menu.menus" v-show="menu.show" transition="staggered" class="list-group-item" role="button" v-on:click.stop="changeLoading(item.click)">{{ item.text }}li> ul> div> div> div> aside> <article class="col-md-7"> <section class="index-content"> <p v-show="loading === 'init' || loading === 'name'">昵称:被删p> <p v-show="loading === 'init' || loading === 'email'">邮箱:wangbeishan@163.comp> <p v-show="loading === 'init' || loading === 'github'">github: <a href="https://github.com/godbasin">github.com/godbasina>p> <div v-show="loading === 'sethead'">这里是修改头像页面div> <div v-show="loading === 'setinfo'">这里是修改资料页面div> <div v-show="loading === 'other'">这里是其他页面div> section> article>div>template>
2添加Vue组件
<script>// 导入Header组件import MyHeader from './Header.vue'export default { components: { // 导入Header组件 MyHeader }, data () { return { loading: 'init', asidemenus: [{ title: '基本资料', // title用于储存该菜单显示名称 click: 'init', // click用于储存该菜单对应点击时loading的状态值 show: true, // show用于保存菜单是否隐藏的状态 menus: [{ text: '名字', // title用于储存该菜单显示名称 click: 'name' // click用于储存该菜单对应点击时loading的状态值 }, { text: '邮箱', click: 'email' }, { text: 'github', click: 'github' }] }, { title: '设置头像', click: 'sethead', show: true }, { title: '修改资料', click: 'setinfo', show: true }, { title: '其他', click: 'other', show: true }] } }, // 在 `methods` 对象中定义方法 methods: { changeLoading: function (view) { // 更新loading this.loading = view }, toggleContent: function (index) { // 过渡菜单效果并更新loading this.asidemenus[index].show = !this.asidemenus[index].show this.changeLoading(this.asidemenus[index].click) } }}script>
结束语
这里我们没有用到bootstrap中的组件,毕竟用Vue过渡很简单的呢。不得不说,Vue的动画过渡做的真的不错,事件的封装也做的很方便呢。
原文作者:腾讯高级工程师 王贝珊
-前端好课-
最热前端框架,晋升加薪必修技能
多项目迭代式教学,低门槛快速进阶高级工程师
若需了解更多,请扫码添加小助手咨询~
也可直接查找微信号:TencentNext
▲ NEXT学院 官方课程助教 ▲
js过渡效果_干货 | Vue事件、过渡和制作index页面相关推荐
- canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
使用方法 项目中引入 npm install html2canvas html代码 //html代码 js代码 // 引入html2canvas import html2canvas from 'ht ...
- vue 打开html流_在vue项目中添加一个html页面,开启本地服务器
在vue项目里新增一个不需要登录的页面,那么我只能新增一个html页面了,不经过路由,直接在浏览器输入路径打开,那么就需要用到本地服务器, 1.vue里面的html页面最好放过在public文件夹里面 ...
- vue调用接口获取后台数据_使用Vue实现调用接口加载页面初始数据
使用Vue实现调用接口加载页面初始数据 闲着没事写了一个电影推荐的网页,很简单,使用的是Vue的实现. let vm = new Vue({ el:'#content', data:{ name:'' ...
- 覆盖vue.js样式_使用Vue.js和Cloudinary在化身上覆盖眼镜/面罩
覆盖vue.js样式 Deep Learning, a subset of machine learning, helps break down tasks in ways that makes al ...
- vue拆分js文件_基于Vue+Webpack拆分路由文件实现管理
事实是,如果你的项目不是特别大,一般是用不着分拆的.如果项目大了,那就需要考虑分拆路由了.其实,这个操作并不复杂. 当我们用 vue-cli 工具,创建一个新的 vue 项目时,就已经给大家新建好了一 ...
- vue 打开html流_解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题...
Vue项目运行npm run build后会生成一个dist文件夹,我们一般都是把这个文件夹部署到服务器上.dist文件夹里边有一个static文件和一个index.html页面,这个index就是最 ...
- ios 销毁当前页面重新开启_利用Vue中keep-alive,快速实现页面缓存
keep-alive 有时候我们不希望组件被重新渲染影响使用体验:或者处于性能考虑,避免多次重复渲染降低性能.而是希望组件可以缓存下来,维持当前的状态.这时候就可以用到keep-alive组件. 官网 ...
- vue日程安排_在Vue项目中用fullcalendar制作日程表的示例代码
前言 最近老牌日历插件fullcalendar更新了v4版本,而且添加了vue支持,所以用最新的fullcalendar v4制作一个完整日历体验一下,效果图: 安装 fullcalendar的功能被 ...
- fat32转ntfs工具无损数据安全转换_干货真香! 无损制作UD三分区教程,新手小白的福利来了...
[术语]UD三分区=UD区+ntfs的DATA区+fat的EFI区 无损制作--无损原有U盘数据来制作UD三分区 [适用]hdd格式的fat16.fat32.ntfs格式的U盘.读卡器和移动硬盘:不适 ...
最新文章
- 一分钟了解负载均衡的一切
- Unity提高工作效率的终极指南
- linux简单搭建ftp服务器
- ubuntu共享无线链接
- java文字转语音支持ubuntu系统_9个(实时)语音转文字APP分享(推荐收藏)
- nginx.conf配置格式
- Beyond Compare配置
- 用户修改了信息jwt服务器怎么识别,jwt验证登录信息
- django连接自定义mysql,Django中使用自定义Manager管理多个Mysql数据库
- vue中如何调取api_vue-router在history模式下如何调用api?
- JavaScript学习(五十九)—原型、原型链、闭包以及闭包的不足
- dbvisualizer连接达梦_Dbvisualizer怎么使用,Dbvisualizer使用教程解析
- offer oracle svp_SVP - Uncyclopedia
- 使用Android Studio 创建第一个Android 应用
- 德生收音机创始人梁伟(华工杰出校友)的无线电之梦
- PCB多层板生产工艺的起源与发展(一)
- SMBMS超市订单管理系统(一)
- 这些绿色也太好看了吧,这才是真正的高端审美
- Windows2008使用超级终端--转
- 07笔记 离散数学——特殊性质的图——基于离散数学(第3版)_章炯民,陶增乐