代码之家  ›  专栏  ›  技术社区  ›  Kerry Jones

jquery天棚式潘多拉

  •  2
  • Kerry Jones  · 技术社区  · 14 年前

    我试着做一个字幕——通过jQuery,就像潘多拉的。

    我只想让它开始滚动如果

    1)元件的宽度将被切断 2)如果悬停在元素上。

    当你把它滑落时,它应该会恢复正常。

    到目前为止,我所拥有的这些基本上是有效的:

    var h3 = $('h3:first'), h3Width = h3.width();
    
    if( h3.get(0).scrollWidth > h3Width ) {
        $(h3).addClass('department-scroll-container').css( 'width', h3.width() + 'px' ).wrapInner( '<span style="width: ' + h3Width + 'px; position: relative; display:block" />' );
        $('span:first', h3).clone().appendTo( h3 ).hide();
    
        // Create the event
        h3.mouseover( function() {
            var h3 = $(this), h3Width = $(this).width();
    
            $(this).find('span:first').animate({ 'right': h3Width + 'px' }, 5000 );
            var interval = setInterval( function() {
                var visible_span = $('span:visible:first', h3);
    
                $('span:hidden', h3).css( 'right', parseInt( -h3Width ) + 'px' ).show().animate({ 'right': h3Width + 'px' }, 5000, 'linear' );
                visible_span.hide();
            }, 5000 );
    
            $(this).data( 'interval', interval );
        }).mouseout( function() {
            var interval = $(this).data( 'interval' );
            clearInterval( interval );
            $(this).find('span:first').css( 'right', '0' ).end().find('span:last').hide();
        });
    }
    

    问题是,这个 使它滚动一次 是的。

    我认为mouseout之所以会被触发,是因为它的跨度也在里面——我需要一种方法让它变得更平滑,并且以某种方式工作。

    有什么想法吗?


    更新

    由于下面的答案,我得到了一个解决方案,如下所示:

    var h3 = $('h3:first', department), h3Width = h3.width();
    
    // Marquee
    if( h3.get(0).scrollWidth > h3Width ) {
        $(h3).addClass('department-scroll-container').css( 'width', h3.width() + 'px' ).wrapInner( '<span style="width: ' + h3Width + 'px; position: relative; display:block" />' );
        $('span:first', h3).clone().appendTo( h3 ).hide();
    
        // Create the event
        h3.mouseenter( function() {
            var h3 = $(this), h3Width = $(this).width();
    
            $(this).data( 'animate', true ).find('span:first').animate({ 'right': h3Width + 'px' }, 2500, 'linear' );
    
            setTimeout( function() {
                // Don't continue if it's been stopped
                if( !h3.data('animate') )
                    return;
    
                var visible_span = $('span:visible:first', h3);
    
                $('span:hidden', h3).css( 'right', parseInt( -h3Width ) + 'px' ).show().animate({ 'right': h3Width + 'px' }, 5000, 'linear' );
                visible_span.hide();
    
                var interval = setInterval( function() {
                    // Don't continue if it's been stopped
                    if( !h3.data('animate') )
                        return;
    
                    var visible_span = $('span:visible:first', h3);
    
                    $('span:hidden', h3).css( 'right', parseInt( -h3Width ) + 'px' ).show().animate({ 'right': h3Width + 'px' }, 5000, 'linear' );
                    visible_span.hide();
                }, 5000 );
             }, 2500 );
    
            $(this).data( 'interval', interval );
        }).mouseleave( function() {
            $(this).data( 'animate', false );
    
            var interval = $(this).data( 'interval' );
            clearInterval( interval );
            $(this).find('span:first').stop().css( 'right', '0' ).show().end().find('span:last').stop().hide();
        });
    }
    
    0 回复  |  直到 14 年前