JavaScript引发的CSS动画不起作用

时间:2014-08-11 14:11:59

标签: javascript css3 animation transition

根据this CSS Tricks article的建议,我尝试编写一些代码来引导使用JavaScript进行CSS转换。

(这是我的jsFiddle。)

HTML:

<button id="button" onclick="doMove2()" value="play">Play</button>
<div class="foo"></div>

CSS:

#button {
    position: absolute;
    width: 200px;
    height: 50px;
    top: 185px;
    left: 0px;
}

.foo {
    position: absolute;
    width: 50px;
    height: 50px;
    border: 1px dashed black;
    left: 0px;
    top: 120px;
}

.foo.horizTranslate {
    -webkit-transition: 3s;
    -moz-transition: 3s;
    -ms-transition: 3s;
    -o-transition: 3s;
     transition: 3s;
     margin-left: 50% !important;
 }

JavaScript的:

var foo = document.getElementsByClassName('foo')[0];

function doMove2(){
    document.getElementById("button").onclick = function(){

        if(this.innerHTML === 'Play'){
            this.innerHTML = 'Pause';
            foo.classList.add('horizTranslate');

        } else {
            this.innerHTML = 'Play';
            var computedStyle = window.getComputedStyle(foo2),
            marginLeft = computedStyle.getPropertyValue('margin-left');
            foo.style.marginLeft = marginLeft;
            foo.classList.remove('horizTranslate');    
        }
    }
}
  1. 为什么这不起作用?

  2. 有人可以解释过渡动画之间的区别吗?

2 个答案:

答案 0 :(得分:2)

首先,我不建议使用jsfiddle,有时它的毛刺和不可靠。我使用jsbin,查看我的演示:http://jsbin.com/guceneku/1/

我删除了HTML标签中的onclick,因为你已经在js中有了一个触发器,所以它变为:

<button id="button" value="play">Play</button>
<div class="foo"></div> 

接下来你的js变成了:

var foo = document.getElementsByClassName('foo')[0];

document.getElementById("button").onclick = function(){
        if(this.innerHTML === 'Play'){
            this.innerHTML = 'Pause';
            foo.classList.add('horizTranslate');
        } else{
            this.innerHTML = 'Play';
            var computedStyle = window.getComputedStyle(foo2),
            marginLeft = computedStyle.getPropertyValue('margin-left');
            foo.style.marginLeft = marginLeft;
            foo.classList.remove('horizTranslate');    
        }
    }

答案 1 :(得分:0)

您没有定义初始值。它的默认值为autoauto不可转换。

此外,您应该在“基础”状态下定义转换,否则在删除类时不会转换。

所以:

.foo {
    position:absolute;
    width:50px;
    height:50px;
    border:1px dashed black;
    left:0px;
    top:120px;
    margin-left: 0; /* ADD THIS */
    transition: 3s; /* all browsers support unprefixed now */
}

.foo.horizTranslate {
    margin-left: 50%;
}