【问题标题】:addClass removeClass w/jQuery for AnimationsaddClass removeClass w/jQuery 用于动画
【发布时间】:2012-05-06 17:21:01
【问题描述】:

SEE MY ANSWER BELOW

我正在使用 jQuery 使用 CSS 实现我自己的滑动页面转换,但遇到以下问题:

我正在使用 addClass 方法,它在第一次触发链接以将页面动态加载到 div 时起作用。当另一个链接被触发时,页面加载没有过渡。我认为我需要使用 removeClass 方法,但这可以防止转换根本不触发。我尝试了使用这两个类的各种方法,但每次链接触发时我都无法让它工作。

知道我有什么错误/遗漏吗?

编辑对于那些不理解 CSS 子类的人:

一次可以添加多个类,以空格分隔,以 匹配元素的集合,如下所示:

$("p").addClass("myClass yourClass");

Taken from the jQuery Docs

谢谢。

/* --------------- Handle Page Body Loading ----------------- */

function loadBody(target, gotoURL)
{
    $('#' + target)
    .addClass('slide out')
    .load(gotoURL, function (response)
    {
        iniScroll('scrollBody', 'bodyScrollContainer');
    })
    .addClass('slide in')
    removeSlideClass();//WITHOUT THIS, IT FIRES ONLY THE FIRST USE!!
};

function removeSlideClass()
{
    $('#bodyContent').removeClass('slide in');
    $('#bodyContent').removeClass('slide out');
};

如果我按如下所述编写代码,它的工作原理完全相同(jQuery 101);

function loadBody(target, gotoURL)
{
    $('#' + target).addClass('slide out');
    $('#' + target).load(gotoURL, function (response)
    {
        iniScroll('scrollBody', 'bodyScrollContainer');
    });
    $('#' + target).addClass('slide in');
    $('#' + target).removeSlideClass();
};

function removeSlideClass()
{
    $('#bodyContent').removeClass('slide in');
    $('#bodyContent').removeClass('slide out');
};

CSS:

.out, .in {
    -webkit-animation-timing-function: ease-out;
    -webkit-animation-duration: 650ms;
}
.slide.out {
    -webkit-transform: translateX(-100%);
    -webkit-animation-name: slideouttoleft;
}

.slide.in {
    -webkit-transform: translateX(0);
    -webkit-animation-name: slideinfromright;
}

【问题讨论】:

  • $('#' + target) 自己在那里做什么。看起来像语法错误或拼写错误
  • 您是否意识到在您进行的每个 *Class 调用中,您正在操作 2 个类,而不仅仅是一个。 class="slide in" 具有 slidein 类,不要与 slide-in 之类的东西混淆。你应该把你的完整代码放在jsFiddle,我觉得你犯了很多其他错误。
  • 理论上应该不会导致错误,但javascript不需要分号
  • @elclanrs 见上面的编辑。谢谢
  • @SpYk3HH 上面的种子编辑。谢谢

标签: javascript jquery dom css-transitions


【解决方案1】:

我想通了:

.addClass('slide out') 方法与webkitAnimationEnd 事件绑定,后跟return 语句,当第一个转换完成时触发第二个转换。当此事件触发时,它会从原始页面中删除所有类。记住取消绑定webkitAnimationEnd 事件可以防止向新页面添加额外的处理程序,以便在我们需要时可以重新开始该过程。因此不需要jQuery的removeClass()方法。

新的页面转换方式。

/* --------------- Handle Page Body Loading ----------------- */

function loadBody(target, gotoURL)
{
    $('#' + target)
    .addClass('slide out')
    .bind('webkitAnimationEnd', function(){
        $(this).load(gotoURL, function (e)
        {
            iniScroll('scrollBody', 'bodyScrollContainer');
            $('#' + target)
            .toggleClass('slide in')
            .unbind('webkitAnimationEnd');
        });
    });
};

【讨论】:

    【解决方案2】:

    CSS 类不应包含任何空格...

    即:

    slide out,应该是slide-out,或者slide_out或者slideOut

    尝试删除空格并修复 css 中的类以匹配。

    【讨论】:

    • out 和 in 是幻灯片的 SUBCLASSES。查看 CSS 并使用您的真实个人资料。这种方法是您调用它们的方式 - 它适用于应用程序或任何调用 CSS 子类的应用程序中的任何位置。
    • 这是我的真实个人资料...如果它是子类,它应该在 CSS 中没有空格。即 .slide .out 而不是 .slide.out。
    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2017-12-06
    • 2013-08-14
    • 1970-01-01
    相关资源
    最近更新 更多