满口金牙 2022-11-13 18:39 采纳率: 90.4%
浏览 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 01: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月21日
  • 已采纳回答 11月14日
  • 创建了问题 11月13日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部