rotate matrix java_从matrix3d获取CSS转换rotateX角度

为了创建虚拟杂志翻页动画,作者需要在每帧中获取rotateY和rotateX的旋转角度。文章主要聚焦于如何在JavaScript中从CSS的matrix3d转换中提取rotateX的角度,以判断页面翻转是否达到90度,从而切换正面和背面的显示。
摘要由CSDN通过智能技术生成

我正在开发一种工具,可以让你浏览“虚拟杂志”中的内容 . 为了实现翻转动画,我需要能够在动画的每一帧中获得当前的旋转角度,以便在它处于90度时翻转正面和背面 .

这只适用于左右翻页(使用 rotateY ) . 如果我想垂直翻转(日历样式),我需要能够计算 rotateX 的角度 .

任何数学精英都可以帮助我吗?

欢呼并提前谢谢!

编辑:这是适用于 transformY 的功能 . 要检查的元素通过添加变换: rotateY(-180deg) 来变换动画,变换原点为左:

function checkTransitionProgress() {

// SRC: https://css-tricks.com/get-value-of-css-rotation-through-javascript/

el = loremPages[index];

var st = window.getComputedStyle(el, null);

var tr = st.getPropertyValue("-webkit-transform") ||

st.getPropertyValue("-moz-transform") ||

st.getPropertyValue("-ms-transform") ||

st.getPropertyValue("-o-transform") ||

st.getPropertyValue("transform") ||

false;

var values = tr.split('(')[1].split(')')[0].split(',');

var a = values[0];

var b = values[1];

var c = values[2];

var d = values[3];

var scale = Math.sqrt(a * a + b * b);

var sin = b / scale;

var angle = Math.round(Math.atan2(b, a) * (180 / Math.PI));

if (direction == 'forwards') {

if (angle < 90) {

window.requestAnimationFrame(checkTransitionProgress);

} else {

target.style.zIndex = index;

target.frontSide.classList.remove('lorem__side--in-front');

target.backSide.classList.add('lorem__side--in-front');

}

} else {

if (angle > 90) {

window.requestAnimationFrame(checkTransitionProgress);

} else {

target.style.zIndex = targetInvertedIndex;

target.frontSide.classList.add('lorem__side--in-front');

target.backSide.classList.remove('lorem__side--in-front');

}

}

}

checkTransitionProgress();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值