vue的表单数据绑定、修饰符、声明周期和过渡动画

vue的表单数据绑定、修饰符、声明周期和过渡动画

1.表单元素:input 单选,多选,下拉 下拉多选 文本域 提交

1.1单选
<!-- radio:若要互斥,那么需要通过value绑定属性值,此时v-model会通过value值找到对应的属性进行绑定 -->
性别:<input type="radio"  v-model='sex' value="男"><input type="radio"  v-model='sex' value="女">
 <div id="app">
     	1.2多选
         <input type="checkbox" v-model='checked'>{{checked}}
		1.3下拉
         <select  v-model='hobby'>
            <option value="" disabled>请选择</option>
             <option value="吃饭">吃饭</option>
             <option value="睡觉">睡觉</option>
             <option value="打豆豆">打豆豆</option>
         </select>
         爱好:{{hobby}}
		1.4下拉多选
         <!-- multiple:实现下拉菜单的多选,按住alt或者shitf键进行多选 -->
     	 <!-- disabled:禁止选择 -->
         <select multiple  v-model='hobby1'>
            <option value="" disabled>请选择</option>
             <option value="吃饭">吃饭1</option>
             <option value="睡觉">睡觉1</option>
             <option value="打豆豆">打豆豆1</option>
         </select>
         爱好:{{hobby1}}

         <!-- 总结:对于checkbox来讲,默认的初始值类型为数组,如果是其他数据类型,则会直接转换为布尔类型 -->
         <input type="checkbox" value="唱歌" v-model='hobby2'>唱歌
         <input type="checkbox" value="跳舞"  v-model='hobby2'>跳舞
         <input type="checkbox" value="画画"  v-model='hobby2'>画画
         <input type="checkbox" value="打豆豆"  v-model='hobby2'>打豆豆
         爱好:{{hobby2}}
    </div>

当需要选择的选项是单个的时候,Vue中data数据的hobby为空字符串:“”,当需要选择的选项是多个的时候,Vue中data数据的hobby为空数组:[]。

2.修饰符

2.1事件修饰符:stop, prevent, once, self, capture
stop:阻止事件的冒泡;
prevent:阻止事件的默认行为;
once:事件只触发一次;
self:只有自己才能触发自身的事件,但并不影响本身的冒泡事件;
capture:事件捕获。

<--!直接在元素绑定的事件后面添加.修饰符即可-->  
<div class="outer"  @click.self = 'outer'></div>

2.2键盘修饰符
注:除特殊按键(如上下左右键,tab,shift,alt,ctrl等)外,英文字母和数字等需要用阿斯玛值进行绑定

<--!直接在元素绑定的事件后面添加.修饰符即可-->  
<input type="text" @keydown.up = 'up' placeholder="向上">
<input type="text" @keydown.down = 'down' placeholder="向下">
<input type="text" @keydown.right = 'right' placeholder="向右">
<input type="text" @keydown.left = 'left' placeholder="向左">
 
methods: {
          up(){
              console.log('触发向上事件');
          },
          down(){
              console.log('触发down事件');
          },
          right(){
              console.log('触发right事件');
          },
          left(){
              console.log('触发left事件');
          }
        }

2.3鼠标修饰符:left, middle, right

<input type="text" @click.left = 'left' placeholder="左键">
<input type="text" @click.middle = 'middle' placeholder="中间键">
<input type="text" @click.right.prevent = 'right' placeholder="右键">
methods: {
         left(){
            console.log('触发left事件');
         },
         middle(){
            console.log('middle');
         },
         right(){
            console.log('触发right事件');
         }
 		}   

2.4表单修饰符:lazy, number, trim
lazy:光标离开输入之后会更新数据;
number:只判断第一个字符是否是数字,如果是数组则返回的是number类型,否则返回string类型;
trim:过滤首尾空格,是过滤用户输入的内容,如果是初始值中包括空格,则trim不管用。

<--!在v-model后面添加.修饰符即可-->   
<input type="text" v-model.lazy='msg'>{{msg}}
<input type="text" v-model.number='content'>{{typeof(content)}}
<input type="text" v-model.trim='message'>{{message.length}}

3.vue生命周期

钩子函数:
beforeCreate:创建之前,指的是new Vue() 此时的el 还有data都是undefined;
created:创建完成,此时的el是undefined,data已经获取到数据;
beforeMount:挂载之前,此时的el是div 但是{{}}不能被解析, data已经获取到数据;
mounted:挂载完成,此时的el已经加载完所有数据;
beforeUpdate:更新之前,此时指的是页面的更新,更新前后数据是一致的;
updated:更新按成,数据已经是最新的;
beforeDestory:销毁之前;
destroyed:销毁完成,此时的vm实例已经被销毁 双向绑定数据不能使用。

4.动画

4.1给需要添加动画的元素用标签包裹起来

4.2设置样式
在进入/离开的过渡中,Vue内置了6个类名:
v-enter :进入过渡的开始状态。
v-enter-active :进入过渡生效时的状态。
v-enter-to :进入过渡的结束状态。
v-leave :离开过渡的开始状态。
v-leave-active :离开过渡生效时的状态。
v-leave-to:离开过渡的结束状态。

 <style>
       .box{
            width: 100px;
            height: 100px;
            background: red;
        }
        .v-enter{
            opacity: 0;
        }   
        .v-enter-active{
            transition: all 2s;
        }
        .v-enter-to{
            opacity: 1;
        }
        .v-leave{
            opacity: 1;
        }
        .v-leave-active{
            transition: all 2s;
        }
        .v-leave-to{
            opacity: 0;
        }
    </style>
<div id="app">
    <transition>
    <div class="box" v-show='isShow'></div>
    </transition>
    <button @click = 'fade'>点击淡入淡出</button>
  </div>

4.3如果页面中有多个元素需要添加动画,需要给transition添加name属性,同时修改style中的样式,把v-换为name的名字即可

  <transition name='aa'>
            <div class="box" v-show='isShow'>aaaa</div>
   </transition>
   
   在style中写:
   .aa-enter{
            opacity: 0;
            transform: rotate(360deg);
        }   
        .aa-enter-active{
            transition: all 5s;
        }
        .aa-enter-to{
            opacity: 1;
            /* transform: rotate(360deg); */
        }
        /* .aa-leave{
            transform: rotate(360deg);
        } */
        .aa-leave-active{
            transition: all 5s;
        }
        .aa-leave-to{
            transform: rotate(360deg);
        }

4.4引入animate.css库

    <link
       rel="stylesheet"
	href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"
    />
  	<--!animate__animated为基类,中间加一个空格,后面接需要添加的动画类名-->
    <transition 
    enter-active-class='animate__animated animate__rubberBand'
    leave-active-class='animate__animated animate__backOutLeft'
    >
            <div class="box" v-show='isShow'></div>
    </transition>

注意:需要添加什么类名,直接去官网查看,一定要把基类添加上

4.5案例小球动画

<div id="app">
       <button @click = 'fade'>点击淡入淡出</button>
       <transition 
           @before-enter = 'beforeEnter'
           @enter = 'enter'
           @after-enter = 'afterEnter'
        >
          <div class="box" v-show='isShow'></div>
        </transition>
</div>
	methods: {
            fade(){
                this.isShow = !this.isShow
            },
            // el:指的是当前的这个元素,在这指的就是小球
            beforeEnter(el){
                el.style.transform = 'translate(0,0)'
            },
            enter(el,done){
                // offsetWidth用来触发动画。若不写则无法执行动画效果。用offset,scroll或client系列均可
                el.offsetWidth;
                // 小球的终止位置
                el.style.transform = 'translate(500px,400px)'
                // 小球的运动时间
                el.style.transition = 'all 2s'
                // done方法是用来触发afterEnter函数
                done()
            },
            afterEnter(el){
                this.isShow = !this.isShow
            }
		}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值