我有一个问题,浏览器不知道对dom元素的转换起源更改,或者更好的说它知道但有延迟。

我有一个占位符,我想按一下放大。我有这段代码,我在其中计算单击的元素中心并将变换原点应用于变换后的元素。

$(".place-holder")
        .css({
            "-webkit-transform-origin":transCenterY+"px "+transCenterX+"px",
            "transform-origin":transCenterY+"px "+transCenterX+"px",
            "transform":"scale(2)"
        });


发生的情况是浏览器开始按比例缩放到变换原点:50%50%,并且在动画中间,它移动到正确的变换原点位置。

如果我在应用了变换原点后500毫秒应用了比例,则动画将起作用。

该代码可以正常运行:

$(".place-holder")
        .css({
            "-webkit-transform-origin":transCenterY+"px "+transCenterX+"px",
            "transform-origin":transCenterY+"px "+transCenterX+"px"
        });

    setTimeout(function(){
        $(".place-holder").css("transform","scale(2)");
    }, 500)


这是小提琴,因此您可以查看发生了什么:
https://jsfiddle.net/r9xboa1b/

单击红色方块-看到过渡期间的转变了吗?
您只能单击一次,然后再次运行小提琴。

如果在超时中应用刻度,则移位将消失。

编辑

我真正想要实现的是平滑过渡到每个正方形的中心,而不会发生移位且没有超时。
https://jsfiddle.net/r9xboa1b/

最佳答案

我解决了这个问题。

诀窍是,我将过渡应用于元素上的所有转换。
因此,变换原点的变化也过渡了1s,这可以解释动画的变化。

所以改变

transition:all 1s;




transition:transform 1s;


做到了。

对于其他遇到此问题的人-仅将转换应用于所需的那些转换属性。

08-19 02:33