自定义指令

143 阅读1分钟

vue中使用全局指令

main.js中定义
    Vue.directive('color', {
      bind(el){
          el.style.background="red"
      }
    })
组件中使用
    <p v-color>哈哈哈哈哈哈哈哈哈</p>

局部自定义指令--拖拽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.min.js"></script>
    <style>
        .box{
            width: 100px;
            height: 100px;
            border: 1px solid;
            background: blue;
            position: relative;
            top: 0;
            left: 0;
            box-shadow: 5px 5px 10px red inset;

        }
        #app html body{
            width: 100%;
            height: 100%;
        }
        html{
            height: 100%;
            margin: 0;
            padding: 0;
        }
        body{
            margin: 0;
            
            width: 100%;
            height: 100%;
            background: linear-gradient(to top right, red, blue);
        }
    </style>
</head>
<body>
    <div id="app">
        <div v-drag class="box"></div>
    </div>
    <div v-color>我在听课</div>
</body>
</html>
<script>
    new Vue({
        el:"#app",
        data:{

        },
        directives:{
            drag(el,binding){
                el.onmousedown=function(e){
                    var disx=e.pageX-el.offsetLeft;
                    var disy=e.pageY-el.offsetTop;
                    document.onmousemove=function(e){
                        // console.log("123")
                        el.style.left=e.pageX-disx+"px";
                        el.style.top = e.pageY-disy+"px";
                    }
                    document.onmouseup=function(){
                        document.onmousemove = document.onmouseup=null;
                    }
                }
            }
        }
    })
</script>