javascript - Safari 12.1 中的变换原点动画问题

标签 javascript jquery html css css-animations

根据水平鼠标位置更改 div 变换原点的简单动画。

在 Safari 12.1 中不显示动画。相反,div 卡在显示它在页面加载时的转换原点(调整浏览器的大小似乎会更新它)。

脚本正在将正确的值输出到元素上,并且没有出现任何错误,因此需要一些帮助来让它动画化。

它适用于最新的 Chrome、Firefox 和 Safari 11,只是最新的 Safari 有问题。

$(document).mousemove(function(getCurrentPos){
    var xCord = getCurrentPos.clientX;
    var xPercent = xCord/window.innerWidth * 100 + "%";
    document.getElementById("p-beam").style.transformOrigin = xPercent + "100%"; 
});
.beams {
  display: block;
  position: relative;
  overflow: hidden;
  height: 600px;
  background-color: #434343;
}

.p-beam {
  position: absolute;
  left: 0;
  top: -360px;
  right: 0;
  bottom: auto;
  width: 100px;
  height: 360px;
  margin-right: auto;
  margin-left: auto;
  background-image: -webkit-gradient(linear, left top, left bottom, from(transparent), to(#eef));
  background-image: linear-gradient(180deg, transparent, #eef);
  -webkit-transform: perspective(360px) rotateX(-104deg) rotateY(0) rotateZ(0);
  transform: perspective(360px) rotateX(-104deg) rotateY(0) rotateZ(0);
  -webkit-transform-origin: 50% 100%;
  -ms-transform-origin: 50% 100%;
  transform-origin: 50% 100%;
  -webkit-transform-style: preserve-3d;
  transform-style: preserve-3d;
  box-sizing: border-box;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="beams">
  <div id="p-beam" class="p-beam"></div>
</div>

最佳答案

这看起来像一个错误。

我可以通过更改 bean 的 innerHTML/innerText 来让它工作,我认为这样它会强制布局/绘制。

我担心您绘制的区域可能太大,即使这是一个错误,这也可能太昂贵并且您正在达到渲染器的极限。但这只是猜测。

我知道这不一样,但也许你可以通过 transform: rotate() 或 transform: matrix() 完成视觉上相似的事情

const beam = document.getElementById("p-beam");
let i=0;

setInterval(()=>{
  i=(i+1)%100;
  const x = `${i%100}% ${100}%`
  beam.style.transformOrigin = x;
  beam.innerHTML = i;
  //console.log(x)
}, 16);
.p-beam {
  position: absolute;
  left: 0;
  top: -360px;
  right: 0;
  bottom: auto;
  width: 100px;
  height: 360px;
  margin-right: auto;
  margin-left: auto;
  background: yellow;
  
  transform: perspective(360px) rotateX(-104deg) rotateY(0) rotateZ(0);
  
  transform-style: preserve-3d;
  box-sizing: border-box;
}
<div class="beams">
  <div id="p-beam" class="p-beam"></div>
</div>

关于javascript - Safari 12.1 中的变换原点动画问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57751819/

相关文章:

javascript - 从 CSS Modal 记录一个属性

javascript - 全局覆盖 ajax beforeSend

javascript - 使用 jQuery 在 CSS 中切换动画,有没有比我的解决方案更好的方法?

jquery - 如何创建多图像面板

javascript - 使用 CSS 或 JavaScript 计算分页数

javascript - 如何从另一个 iFrame 中清除 iFrame 的内容

javascript - SonarQube 规则 S1451 "Copyright and license headers should be defined"- JavaScript 没有正则表达式

javascript - 如果可拖动元素在可放置边界之前拖动,如何解决 jQuery UI 可放置错误,其中 over/out 不会触发

javascript - JQuery 从 data() 数组中获取倒数第二个项目

html - 是否溢出 :hidden not work on floats?