css – 如何通过切换类同时应用多个旋转变换?

前端之家收集整理的这篇文章主要介绍了css – 如何通过切换类同时应用多个旋转变换?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图通过单击按钮来打开和关闭类来将各种变换应用于给定元素或元素集.这适用于大多数事情,但不是当我尝试切换多个旋转变换.一旦一个元素有两个单独的旋转变换类(rotateX,rotateZ),转换将按照我的期望停止工作.

请看我这里的例子:http://jsfiddle.net/XTVd7/9/

CSS

#Box {
    width: 100px;
    height: 100px;
    border: 1px solid blue;
    transition: all 1s;
}

.flip {
    -webkit-transform: rotateX(360deg);
    -moz-transform: rotateX(360deg);
    -ms-transform: rotateX(360deg);
    -o-transform: rotateX(360deg);
}

.spin {
    -webkit-transform: rotateZ(360deg);
    -moz-transform: rotateZ(360deg);
    -ms-transform: rotateZ(360deg);
    -o-transform: rotateZ(360deg);
}

jQuery的

$("#flipBtn").on("click",function() {
    $("#Box").toggleClass("flip");
});

$("#spinBtn").on("click",function() {
    $("#Box").toggleClass("spin");
});

我会期望我可以随时翻转或旋转盒子,方法是打开或关闭任一班.一旦这两个类都被添加到它,情况就不是这样.

解决方法

如果要切换同一属性的多个值,则必须手动构造属性文本( fiddle):
function createToggleFunction(element$) {
    var transforms = {
        flip: 'rotateX(120deg)',spin: 'rotateZ(180deg)',};

    var state = {};

    return function(transform) {
        state[transform] ^= true;
        var text = "";
        for(var key in transforms) {
            if(state[key]) text += transforms[key] + ' ';
        }
        element$.css('transform',text);
    };
}

var toggle = createToggleFunction($('#Box'));

$("#flipBtn").on("click",function() {
    toggle('flip');
});

$("#spinBtn").on("click",function() {
    toggle('spin');
});

一个更简单的解决方案是使用两个嵌套元素来表示“框”,其中一个转换应用于外层,一个转换应用于内部的一个:

(见this edited version of jblasco’s fiddle)

#spinner {
    width: 100px;
    height: 100px;
    transition: all 1s;
}

#flipper {
    width: 100%;
    height: 100%;
    transition: all 1s;
    border: 1px solid blue;
}

HTML:

<div id="spinner">
  <div id="flipper">
    a
  </div>
</div>

JQuery的:

$("#flipBtn").on("click",function() {
    $("#flipper").toggleClass("flip");
});

$("#spinBtn").on("click",function() {
    $("#spinner").toggleClass("spin");
});

猜你在找的CSS相关文章