我试着做一个字幕——通过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();
});
}