使用javascript和css进行按钮转换,如何暂时禁用转换

时间:2013-08-16 15:51:43

标签: javascript jquery css css3 css-transitions

基本上我有一个按钮,我想悬停并滑动到绿色(活动)按钮然后鼠标滑出并滑动到看起来像是打开的灰色无效按钮但它从左边进来,然后我会喜欢取消这个设置,所以我的按钮在开始时没有实际转换到它,希望这有意义吗?

此刻如果我转换到从左边开始的第一个按钮:0到左:-210px你会看到转换,因为.btn-ctn有转换,是否可以暂时禁用它以便按钮有效跳转所以你没看到绿色的中间按钮?

CSS

* {
    padding: 0;
    margin: 0;
    border: 0;
    outline: 0;
    list-style: none;
}

body {
    padding: 20px;
}

.direction {
    width: 70px;
    overflow: hidden;
}

.btn-ctn {
    width: 210px;
    position: relative;
    left: -140px;
    -webkit-transition: left .3s ease-in-out;
}

.btn-ctn.on {
    left: -70px;
}

.btn-ctn.off {
    left: 0;
}

.btn-ctn > li {
    float: left;
    position: relative;
}

.btn {
    width: 70px;
    height: 70px;
    background: #676767;
    display: block;
}

.btn::after {
    content: '';
    width: 30px;
    height: 30px;
    border-right: 2px solid white;
    border-top: 2px solid white;
    display: block;
    position: absolute;
    top: 0; right: 15px; bottom: 0; left: 0;
    margin: auto;
    -webkit-transform:rotate(45deg);
}

.active .btn {
    background: #5cdf84;
}

.btns > li::after {

}

JS

$('.btn').on('mouseenter', function() {

    $('.btn-ctn').removeClass('off').addClass('on');

}).on('mouseleave', function() {

    $('.btn-ctn').removeClass('on').addClass('off');

    //reset to start without actually animating so if i hover over again the same animation happens as if its first time?

});

的jsfiddle http://jsfiddle.net/AtZX2/2/

2 个答案:

答案 0 :(得分:2)

编辑我想我想出了你现在要做的事情。您需要按照我之前的建议将transition属性移到onoff类上:

.btn-ctn {
    width: 210px;
    position: relative;
    left: -140px;
}

.btn-ctn.on {
    left: -70px;
    -webkit-transition: left .3s ease-in-out;
}

.btn-ctn.off {
    left: 0;
    -webkit-transition: left .3s ease-in-out;
}

...但关键是要监听webkitTransitionEnd事件,以便在完成滑动后移除off类:

$('.btn-ctn').on('webkitTransitionEnd', function(e)  { 
     $(e.target).removeClass('off');
});

这里的JSFiddle演示:http://jsfiddle.net/AtZX2/6/

答案 1 :(得分:1)

我创造了一个小提琴: Example

基本上你做得非常好。它缺少的唯一重要的事情是动画结束时超时:

setTimeout(function(){
    $('.btn-ctn')
        .removeClass('on off2 animated')
        .addClass('off')
}, 300);

将转换的CSS值与JS代码同步时可能会出现问题。考虑使用.animate在javascript中完全完成动画。我知道它不像CSS3y,但它可以防弹。