满口金牙 2022-11-14 02:39 采纳率: 91.5%
浏览 40
已结题

vue 移动dom元素 至click的位置方法?

        htmlElement = document.getElementById('icon-option-list') as HTMLElement  (是绝对定位 ,不确定 top 与 left 位置)
 
        let x = htmlElement.getBoundingClientRect().top - e.clientY    // 点击位置 与 htmlElement 元素的 x相差距离,这样算对吗?
        let y = htmlElement.getBoundingClientRect().left - e.clientX   // 点击位置 与 htmlElement 元素的  y相差距离
          在不知道 htmlElement 相对 定位元素 的位置时,不
         现在我要把 htmlElement  元素 移动到点击位置, 怎么移动?


        这样好象不对:
            htmlElement.style.top = htmlElement.offsetTop + y +'px'
            htmlElement.style.left = htmlElement.offsetLeft + x+'px'
  • 写回答

5条回答 默认 最新

  • CSDN专家-showbo 2022-11-14 09:38
    关注

    直接设置htmlElement 的left/top为事件对象e.clientX和e.clientY就可了。e.clientX和e.clientY就是点击的位置,移动到这个位置不需要再计算,不过是居于htmlElement 的左上角,如果htmlElement 的中心点在点击的位置需要计算过

    
    <div id="icon-option-list" style="position:absolute;left:0;top:0;border:solid 1px #ccc;padding:10px">icon-option-list</div>
    <script>
        document.onclick = function (e) {
            htmlElement = document.getElementById('icon-option-list')// as HTMLElement
    
            //居于htmlElement左上角
            //htmlElement.style.left = e.clientX + 'px'
            //htmlElement.style.top = e.clientY + 'px'
    
            //下面居于htmlElement中心点
            let info = htmlElement.getBoundingClientRect()
    
            htmlElement.style.left = e.clientX-info.width/2 + 'px'
            htmlElement.style.top = e.clientY - info.height / 2 + 'px'
        }
    </script>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 11月22日
  • 已采纳回答 11月14日
  • 创建了问题 11月14日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)