【问题标题】:Move center of rotated element to cursor将旋转元素的中心移动到光标
【发布时间】:2021-10-19 12:15:14
【问题描述】:

我想用光标移动一个元素,同时在光标位置跳过元素的中心,我知道该怎么做,但是当元素旋转时问题就开始了。
这是sn-ps:

未旋转:

var offset = [0,0];
var el;

document.addEventListener("DOMContentLoaded", function(event) {
     el = document.getElementById("el");

     offset = [
        parseInt(getComputedStyle(el).getPropertyValue("width"))/2,
        parseInt(getComputedStyle(el).getPropertyValue("height"))/2
    ];

    document.addEventListener('mousemove',fun,false);
        
});

function fun(event) { 
    mousePosition = {

        x : event.clientX,
        y : event.clientY

    };

    el.style.left = (mousePosition.x - offset[0]) + 'px';
    el.style.top  = (mousePosition.y - offset[1]) + 'px';

  }
#el{
  background: red;
  height:100px;
  width:100px;
  text-align:center;
  font-size:1.2em;
  position:absolute;
  display: flex;
  justify-content: center;
  align-items: center;
}
<div id="el">not rotated works fine</div>

旋转:

var offset = [0,0];
var el;

document.addEventListener("DOMContentLoaded", function(event) {
     el = document.getElementById("el");

     offset = [
        parseInt(getComputedStyle(el).getPropertyValue("width"))/2,
        parseInt(getComputedStyle(el).getPropertyValue("height"))/2
    ];

    document.addEventListener('mousemove',fun,false);
        
});

function fun(event) { 
    mousePosition = {

        x : event.clientX,
        y : event.clientY

    };

    el.style.left = (mousePosition.x - offset[0]) + 'px';
    el.style.top  = (mousePosition.y - offset[1]) + 'px';

  }
#el{
  background: red;
  height:100px;
  width:100px;
  text-align:center;
  font-size:1.2em;
  position:absolute;
  display: flex;
  justify-content: center;
  align-items: center;
  transform-origin: 0% 100%;
  transform: rotateZ(-55deg) rotateY(55deg) rotateX(-25deg) ;
}
<div id="el">rotated, doesn't work</div>

有什么想法可以轻松又漂亮地做到这一点吗? 提前致谢。

编辑:
我需要 transform-origin 用于动画,因此将 transform-origin 更改为 0 是不够的,我还需要为位置设置动画。 是否有任何工具可以转换这种转换:

transform-origin: 0% 100%;
transform: rotateZ(-55deg) rotateY(55deg) rotateX(-25deg) ;

进入这个模式:

transform-origin: center;
transform: rotateZ() rotateY() rotateX() translateX() translateY() translateZ();

【问题讨论】:

    标签: javascript html css rotation


    【解决方案1】:

    改变样式如下。

    #el{
      background: red;
      height:100px;
      width:100px;
      text-align:center;
      font-size:1.2em;
      position:absolute;
      display: flex;
      justify-content: center;
      align-items: center;
      transform-origin: center;      /* This is changed :) */
      transform: rotateZ(-55deg) rotateY(55deg) rotateX(-25deg) ;
    }
    

    【讨论】:

    • 所以你是说transform-origin 只影响位置?
    • 当然,我已经确认您的代码可以处理代码上的更改
    • 我很困惑,因为我制作了没有动画的 sn-p,我需要这个 transform-origin 用于动画而不是位置,所以你的解决方案还不够,我还需要一种计算位置转换的方法并执行手动。
    猜你喜欢
    • 2021-04-19
    • 2013-03-01
    • 1970-01-01
    • 2015-10-03
    • 2017-08-08
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多