【问题标题】:Cross-Browser-Problem: transform: rotateX() – JS + CSS跨浏览器问题:transform: rotateX() – JS + CSS
【发布时间】:2021-04-12 23:25:25
【问题描述】:

我在这里写了这个脚本:https://jsfiddle.net/g130hqv4/2/

这是应该发生的: 我在页面上移动光标,页面中间的 div 稍微跟随光标的位置并旋转到那个方向。 (另见屏幕截图。)

Screenshot-1: Cursor is in the middle of the page: Screenshot-2: Cursor is in the upper left corner:

当我在做这个时,我使用了 Safari,现在我意识到它只适用于 Safari,我还测试了 Opera 和 Chrome,并且 div 可以按预期移动,但它不会旋转。我虽然问题必须是:CSS3 3D Transforms,或者:perspective: 500;,但我检查了 CanIUse.com 并且都支持,这是怎么回事?

–––––––––––

这是我的 JS:

var overlayDiv = document.querySelector(".hello");

var moveDivMaxX = undefined;
var moveDivMaxY = undefined;

var viewport_center = {
    x: undefined,
    y: undefined
};

var mouse = {
    x: undefined,
    y: undefined
};

var differenceX = undefined;
var differenceY = undefined;

var moveDivX = undefined;
var moveDivY = undefined;

// tilt START
var tiltX = undefined;
var titlY = undefined;
    
var MaxTiltX = 10;
var MaxTitlY = 10;
//tilt END

function load() {
    moveDivMaxX = window.innerWidth * 0.08;
    moveDivMaxY = window.innerHeight * 0.08;
    
    viewport_center.x = window.innerWidth / 2;
    viewport_center.y = window.innerHeight / 2;
}

window.addEventListener('mousemove', function(e) {
    mouse.x = e.x;
    mouse.y = e.y;
    
    differenceX = viewport_center.x - mouse.x;
    differenceX = differenceX * -1;
    
    differenceY = viewport_center.y - mouse.y;
    differenceY = differenceY * -1;
    
    var moveDivXinPercent = differenceX * 100 / viewport_center.x;
    moveDivX = moveDivMaxX / 100 * moveDivXinPercent;
    
    var moveDivYinPercent = differenceY * 100 / viewport_center.y;
    moveDivY = moveDivMaxY / 100 * moveDivYinPercent;
    
    
    var centerDivX = viewport_center.x - (document.querySelector(".hello").clientWidth / 2);
    var centerDivY = viewport_center.y - (document.querySelector(".hello").clientHeight / 2);
    
    overlayDiv.style.left = centerDivX + moveDivX + "px";
    overlayDiv.style.top = centerDivY + moveDivY + "px";
    
    // Tilt hello START
    tiltX = MaxTiltX / 100 * moveDivYinPercent * -1;
    titlY = MaxTitlY / 100 * moveDivXinPercent;
  
    overlayDiv.style.transform = "rotateX(" + tiltX + "deg) rotateY(" + titlY + "deg)";
    // Tilt hello END
})

window.onresize = load;
load();

【问题讨论】:

  • 该代码似乎也适用于 FF。只是旋转的变化很小,很难看到。如果您将 tiltXtitlY 相乘,例如。 5,然后可以更好地看到旋转。为什么/如何旋转在 Safari 中更大,我不能说,因为我手头没有 Safari 可供测试。
  • @Teemu 感谢您提供这些信息!我刚刚想通了,这对我有帮助。 :)

标签: javascript css cross-browser


【解决方案1】:

赫里卡!我发现了问题:

我把这个:perspective: 500; 改成了这个:perspective: 500px;

我再次在 Safari、Opera 和 Chrome 中对此进行了测试,并且可以正常工作。 :)

【讨论】:

  • 有人可以接受这个答案吗? – 我不能,这解决了问题……@Teemu
  • 只有您可以接受此帖子中的答案。在您接受自己的答案之前,可能会有某种宽限期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2014-08-06
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多