满口金牙 2022-11-14 02:39 采纳率: 91.1%
浏览 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 关于#网络#的问题:网络是从楼上引一根网线下来,接了2台傻瓜交换机,也更换了ip还是不行
  • ¥15 资源泄露软件闪退怎么解决?
  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化