Vue自定义指令--- 文本高亮,输入框聚焦,鼠标拖拽

本文详细介绍了在Vue项目中如何使用自定义指令实现文本高亮显示、输入框自动聚焦及元素拖拽等功能,通过具体代码示例展示了这些功能的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文本高亮,字体放大,鼠标拖拽
<template>
  <div id="main">
	<p v-colors>文本颜色突出</p>	
	//进入界面默认,文本框聚焦
	<input type="text" v-focus>
	// 鼠标拖拽
	<div class="drag" v-drag></div>
  </div>
</template>
<script>
export default {
  name: 'directives',
  data () {
    return {}
  },
  mounted(){},
  directives:{
 	//文本指定颜色
    colors(el,binding){
       //el.style.color = 'red';
       el.style.color=binding.value;
    },
    //输入框聚焦  行为相关的用inserted
    focus{
      inserted(el){
      	el.focus();
      }
    },
  	//拖拽
	/*
	 @left,top 元素的相对位置
	 @parentWid,parentHei 元素的父节点的宽高
	 @dragX,dragY  鼠标相对元素的位置
	 */
    drag(el){
      let dragger = el;
       document.onselectstart = function () {
        return false;
      };
      dragger.onmousedown = e =>{
   		let left, top,parentWid, parentHei;
        //算出鼠标相对元素的位置
        let dragX = e.clientX  - dragger.offsetLeft;
        let dragY = e.clientY - dragger.offsetTop;

        // 获取父级节点 的宽高
        parentWid = e.target.parentNode.clientWidth;
        parentHei = e.target.parentNode.clientHeight;

        document.onmousemove = e =>{
         //用鼠标的位置减去鼠标相对元素的位置,得到元素的位置
         left = e.clientX - dragX;
         top = e.clientY - dragY;
		
		 // 边界设置  先求最小
         left = Math.min(left, parentWid - drager.offsetWidth);
         left = Math.max(0, left);

         top = Math.min(top, parentHei - drager.offsetHeight);
         top = Math.max(0, top);

		  //移动当前元素
          dragger.style.left = `${left}px`;
          dragger.style.top = `${top}px`;
        }
        document.onmouseup = e =>{
          //释放监听
          document.onmousemove = document.onmouseup= null;
         //return false不加的话可能导致黏连,就是拖到一个地方时div粘在鼠标上不下来,相当于onmouseup失效
        return false;
        }
      }
    },
  }
}
</script>
<style scoped>
#main{
  position: relative;
  .drag{
  	 position: absolute;
 	 width: 100px;
     height: 100px;
     background-color: cyan;
  }
}
</style>

此笔记仅仅为了记录自己在项目中所学到的知识,如果有问题,可以提出,我们可以共同探讨。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值