addClass& removeClass Transitions - Firefox

时间:2013-04-09 23:18:36

标签: jquery html css transitions

编辑:解决了文本问题,仍需要Firefox过渡的帮助。

向下滚动页面后尝试使用最小菜单。代码工作的意义在于它正在转换,但它并没有像我希望的那样过渡。有两个问题:

  1. 在Chrome中,只有在其他所有内容移动后,文本才会“滑动”到中间位置。
  2. 在Firefox中,图像不会转换/淡出,只是从右侧“打开”。
  3. 在理想情况下,我希望图像像在Chrome中一样动画,但我希望文本像在Firefox中一样滑动到位。

    我已经在Stackoverflow和其他地方查找了其他问题,但似乎没有一个解决方案来解决Webkit& MOZ。

    jsFiddle问题。

    试试这个:

    $(document).on("scroll",function(){
            if($(document).scrollTop()>100){ 
                $(".logo").removeClass("logo_large").addClass("logo_small");
                $("header").removeClass("large").addClass("small");
                }
            else{
                $(".logo").removeClass("logo_small").addClass("logo_large");
                $("header").removeClass("small").addClass("large");
                }
            });
    .small li, .large li, .logo_large, .logo_small {
        transition: all 1s;
        -moz-transition: all 1s; /* Firefox 4 */
        -webkit-transition: all 1s; /* Safari and Chrome */
        -o-transition: all 1s; /* Opera */
    }
    
    nav {
        width: 960px;
        margin: 0 auto;
    }
    
    ul {
        display:inline-table;
        list-style-type: none;
        text-align: center;
    }
    
    li {
        display:table-cell;
        float: left;
        text-align: center;
        margin-right: 30px;
    }
    
    .large li {
        height: 120px;
        line-height: 120px;
    }
    
    .small li {
        height: 70px;
        line-height: 70px;
    }
    
    .logo_large {
        height: 130px;
        width: 164px;
        background:url(https://unsplash.it/200/300) no-repeat;
    }
    
    .logo_small {
        height: 80px;
        width: 50px;
        background:url(https://unsplash.it/200/300) no-repeat;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <header class="large">
        <nav>
            <ul>
                <li><a class="active" href="#">Home</a></li>
                <li><a href="#">Services</a></li>
                <li><a href="#">Portfolio</a></li>
                <li class="logo logo_large"></li>
                <li><a href="#">Blog</a></li>
                <li><a href="#">About</a></li>
                <li><a href="#">Contact</a></li>
            </ul>
        </nav>
    </header>

2 个答案:

答案 0 :(得分:3)

header, a, img, li{...中移除转场并添加到实际元素:

.large li {
    height: 120px;
    line-height: 120px;
    transition: all 1s;
    -moz-transition: all 1s; /* Firefox 4 */
    -webkit-transition: all 1s; /* Safari and Chrome */
    -o-transition: all 1s; /* Opera */
}

.small li {
    height: 70px;
    line-height: 70px;
    transition: all 1s;
    -moz-transition: all 1s; /* Firefox 4 */
    -webkit-transition: all 1s; /* Safari and Chrome */
    -o-transition: all 1s; /* Opera */
}

.logo_large {
    height: 130px;
    width: 164px;
    background:url(http://samaradionne.com/img/typeBlack.png) no-repeat;
    transition: all 1s;
    -moz-transition: all 1s; /* Firefox 4 */
    -webkit-transition: all 1s; /* Safari and Chrome */
    -o-transition: all 1s; /* Opera */
}

.logo_small {
    height: 80px;
    width: 50px;
    background:url(http://samaradionne.com/img/logoBlack.png) no-repeat;
    transition: all 1s;
    -moz-transition: all 1s; /* Firefox 4 */
    -webkit-transition: all 1s; /* Safari and Chrome */
    -o-transition: all 1s; /* Opera */
}

答案 1 :(得分:1)

如果这些是你唯一的两种状态,你可以通过创建一个持久类和一个覆盖类来避免这个问题,并将你的风格应用到这些状态,例如:

.logo { }
.logo.minimized { }

只需添加和删除叠加样式。

这应该允许jQuery正确计算转换。