zoukankan      html  css  js  c++  java
  • vue视频: 自定义指令 && 拖拽 && 自定义键盘信息

    v-text
    v-for
    v-html
    指令: 扩展html语法

    自定义指令:
    1. 自定义属性指令:

    Vue.directive(指令名称,function(参数){
        this.el    -> 原生DOM元素  // vm.$el
    });
    
    <div v-red="参数"></div>

    指令名称: v-red -> red

    * 注意: 必须以 v-开头(定义时去掉v-)

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>智能社——http://www.zhinengshe.com</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
    
        </style>
        <script src="vue.js"></script>
        <script>
            Vue.directive('red',function(color){
                this.el.style.background=color;
            });
    
            window.onload=function(){
                var vm=new Vue({
                    el:'#box',
                    data:{
                        a:'blue'
                    }
                });
            };
    
        </script>
    </head>
    <body>
        <div id="box">
            <span v-red="a">
                asdfasd
            </span>
        </div>
    
    </body>
    </html>
    Vue.directive('red',function(color){})

    demo:拖拽

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>智能社——http://www.zhinengshe.com</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
        </style>
        <script src="vue.js"></script>
        <script>
            Vue.directive('drag',function(){
                var oDiv=this.el;
                oDiv.onmousedown=function(ev){
                    var disX=ev.clientX-oDiv.offsetLeft;
                    var disY=ev.clientY-oDiv.offsetTop;
    
                    document.onmousemove=function(ev){
                        var l=ev.clientX-disX;
                        var t=ev.clientY-disY;
                        oDiv.style.left=l+'px';
                        oDiv.style.top=t+'px';
                    };
                    document.onmouseup=function(){
                        document.onmousemove=null;
                        document.onmouseup=null;
                    };
                };
            });
    
            window.onload=function(){
                var vm=new Vue({
                    el:'#box',
                    data:{
                        msg:'welcome'
                    }
                });
            };
    
        </script>
    </head>
    <body>
        <div id="box">
            <div v-drag :style="{'100px', height:'100px', background:'blue', position:'absolute', right:0, top:0}"></div>
            <div v-drag :style="{'100px', height:'100px', background:'red', position:'absolute', left:0, top:0}"></div>
        </div>
    
    </body>
    </html>
    ev.clientX-oDiv.offsetLeft

    2.自定义元素指令:(用处不大)

        Vue.elementDirective('zns-red',{
            bind: function(){
                this.el.style.background='red';
            }
        });

    -------------

    @keydown.up
    @keydown.enter

    @keydown.a/b/c....

    自定义键盘信息:
    Vue.directive('on').keyCodes.ctrl=17;
    Vue.directive('on').keyCodes.myenter=13;

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>智能社——http://www.zhinengshe.com</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black">
        <style>
    
        </style>
        <script src="vue.js"></script>
        <script>
            //ctrl->17
            /*document.onkeydown=function(ev){
                console.log(ev.keyCode);
            };*/
            Vue.directive('on').keyCodes.ctrl=17;  //
            Vue.directive('on').keyCodes.myenter=13;
    
            window.onload=function(){
                var vm=new Vue({
                    el:'#box',
                    data:{
                        a:'blue'
                    },
                    methods:{
                        show:function(){
                            alert(1);
                        }
                    }
                });
            };
    
        </script>
    </head>
    <body>
        <div id="box">
            <input type="text" @keydown.myenter="show">
        </div>
    
    </body>
    </html>
    Vue.directive('on').keyCodes.myenter=13;

    监听数据变化:
        vm.$el/$mount/$options/....
    
        vm.$watch(name,fnCb);  //浅度
        vm.$watch(name,fnCb,{deep:true});  //深度监视 
  • 相关阅读:
    P1219 [USACO1.5]八皇后 Checker Challenge 深度搜索 标记 回溯
    P2036 [COCI2008-2009#2] PERKET 深度搜索 暴力
    20201122 赛事纪录
    P4447 [AHOI2018初中组]分组 贪心
    P4995 跳跳! 贪心
    P1434 [SHOI2002]滑雪 记忆化搜索,深度搜索,动态规划
    leetcode(42)接雨水
    数据结构与算法的总纲
    leetcode(84)柱状图中最大的矩形
    leetcode(45)跳跃游戏
  • 原文地址:https://www.cnblogs.com/zyjzz/p/9749764.html
Copyright © 2011-2022 走看看