vue项目中图标可拖拽功能实现

本文介绍如何在Vue项目中实现图标拖拽功能。通过监听鼠标事件,获取鼠标坐标并转换为图标的位置,限制拖拽范围。核心知识点包括:获取页面宽高、元素位置属性。代码中使用et.preventDefault()防止默认事件影响操作。该功能适用于提升用户体验。

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

vue项目中页面实现图标拖拽功能


最近在做项目需求时有个小功能:在页面的首页增加一个快速功能按钮,用来满足操作者快速实现某一目的渴望。为了体现代码搬运工的气质与水准,当时心想,这么简单的一个小东西必须给它整的明明白白。于是在页面的左上角完美的位置fixed了一个完美的图标,并配上骚气的颜色。就在一切功能都测试完毕,静待发版部署生产环境的时候,产品告诉我,这个按钮要在所有页面都有,而不单单只在首页!(所有页面就所有页面,只要把这个图标挪到组件的公共页里,不就可以简单的实现了嘛)于是一顿简单暴力的操作在我脑海里一一闪现。可是在图标全都放好才发现,每个页面的内容不同,样式也不一样,之前位置固定的图标就可能会覆盖在某些页面的按钮或图表上,这样即影响其他功能也不美观。于是图标支持 拖拽迫在眉睫!(说了那么多废话,都是 拖拽的炮灰 >_< ~)

实现思路:

  1. 按住鼠标左键进行拖动时获取鼠标对应位置的坐标;
  2. 通过鼠标坐标的变化,将坐标值换成图标距离窗口上(top)、左(left)的位置。

知识点:

  1. 获取最大拖拽宽高:
    window.innerHeight/innerWidth 页面的窗口的高/宽(包含工具条和滚动条);
    document.documentElement.clientHeight/clientWidth (html元素的高/宽);
    document.body.clientHeight/clientWidth (html中body的高/宽);
  2. 图标及鼠标位置:
    dom.offsetTop/offsetLeft (dom为获取的图标dom元素,offsetTop/offsetLeft为图标定位属性的top/left值----- 此值决定图标在页面上的实际位置);
    dom.offsetHeight/offsetWidth 可以理解为dom元素的实际高/宽;

代码实现:

  • 创建需要拖拽的元素并绑定鼠标事件
<template>
  <div>
    <span>{
   {
   msg}}</span>
    <div class="homeDiv" id="drag">
      <div class="iconClass" @dblclick="clickFunc" @mousedown="mousedown" @mousemove="mousemove" @mouseup="mouseup">
        <span class="spanClass">{
   {
   iconMsg}}</span>
      </div>
    </div>
  </div>
</template>
  • 拖拽时触发鼠标事件拿到并处理数据
export default{
   
    data(){
   
      retu
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值