Vue-自定义指令

  • 局部指令只有当前的实例,不能用在其他实例中。

1、注册全局指令

这里的注册可以通过使用Vue.directive(id,definition)来注册一个全局指令。

<div id="box">
    <input type="text" v-focus>
</div>
<script>
    Vue.directive('focus', {
        inserted: function (el) {
            el.focus();
        }
    });

    var vm = new Vue({
        el : '#box',
    });
</script>

2、注册局部指令

这里是放到directives中的。例如这里的setBorder的函数。

<div id="example">
  	边框宽度:<input type="text" v-model="border">
	<p>
		<img width="200" src="line.jpg" v-set-border="border">
	</p>
</div>
<script type="text/javascript">
var vm = new Vue({
	el:'#example',
	data: {
        border: ''
    },
    directives: {
        setBorder: {
            update: function (el,binding) {
				el.border = binding.value;//设置元素边框
            }
        }
    }
})
</script>

3、钩子函数

这里的el是指令所绑定的元素可以直接操作DOM,后面的binding是一个传入的值的对象,可以用value得到v-demo时绑定的元素的值

<div id="example">
	<label>选择文字大小:</label>
  	<select v-model="size">
		<option value="20px">20px</option>
		<option value="30px">30px</option>
		<option value="40px">40px</option>
		<option value="50px">50px</option>
		<option value="60px">60px</option>
	</select>
	<p v-font-size="size">天生我材必有用</p>
</div>
<script type="text/javascript">
var vm = new Vue({
	el:'#example',
	data: {
        size: '20px'
    },
    directives: {
        fontSize: function (el,binding) {
			el.style.fontSize = binding.value;//设置字体大小
        }
    }
})
</script>

4、在这里要说明的是,自定义指令的绑定的值不仅仅是data中的属性,也可以是其他的Javascript表达式,数值常量、字符串常量、对象字面量

我这里就局了数组的引用方式,其他的都只要value就可以:

<div id="example">
	<p v-font-size="{size:54}">天生我材必有用</p>
</div>
<script type="text/javascript">
var vm = new Vue({
	el:'#example',
	data: {
        size: '20px'
    },
    directives: {
        fontSize: function (el,binding) {
			el.style.fontSize = binding.value.size;//设置字体大小
        }
    }
})
</script>

上机大作业(移动的图片):

<div id="box">
    <img src="banner.jpg" v-move>
</div>
<script type="text/javascript">
var vm = new Vue({
	el:'#box',
    directives: {
        move: function (el) {
			//按下鼠标
			el.onmousedown = function(e) {
				var initX = el.offsetLeft;
				var initY = el.offsetTop;
				var offsetX = e.clientX - initX;
				var offsetY = e.clientY - initY;
				//移动鼠标
				document.onmousemove = function(e) {
					var x = e.clientX - offsetX;
					var y = e.clientY - offsetY;
					var maxX = document.documentElement.clientWidth - el.offsetWidth;
					var maxY = document.documentElement.clientHeight - el.offsetHeight;
					if(x <= 0) x = 0;
					if(y <= 0) y = 0;
					if(x >= maxX) x = maxX;
					if(y >= maxY) y = maxY;
					el.style.left = x + "px";
					el.style.top = y + "px";
					return false;
				}
			}
			//松开鼠标
			document.onmouseup = function() {
        		document.onmousemove = null;
    		}
        }
    }
})
</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值