非常简单,非常流畅,JavaScript Marquee

IT技术 javascript jquery html marquee
2021-02-07 15:27:55

我试图找到一个非常简单和流畅的轻量级 javascript 或 jquery 选框。我已经尝试过Silk marquee或其他东西,但它不适用于我正在使用的应用程序。所以越简单越短越好 - 也更容易调试。有人知道一个易于实现的 javascript 替换选框吗?

糊状

代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<script type="text/javascript">
var tWidth='300px';                  // width (in pixels)
var tHeight='25px';                  // height (in pixels)
var tcolour='#ffffcc';               // background colour:
var moStop=true;                     // pause on mouseover (true or false)
var fontfamily = 'arial,sans-serif'; // font for content
var tSpeed=3;                        // scroll speed (1 = slow, 5 = fast)

// enter your ticker content here (use \/ and \' in place of / and ' respectively)
var content='Are you looking for loads of useful information <a href="http:\/\/javascript.about.com\/">About Javascript<\/a>? Well now you\'ve found it.';

var cps=-tSpeed; var aw, mq; var fsz = parseInt(tHeight) - 4; function startticker(){if (document.getElementById) {var tick = '<div style="position:relative;width:'+tWidth+';height:'+tHeight+';overflow:hidden;background-color:'+tcolour+'"'; if (moStop) tick += ' onmouseover="cps=0" onmouseout="cps=-tSpeed"'; tick +='><div id="mq" style="position:absolute;right:0px;top:0px;font-family:'+fontfamily+';font-size:'+fsz+'px;white-space:nowrap;"><\/div><\/div>'; document.getElementById('ticker').innerHTML = tick; mq = document.getElementById("mq"); mq.style.right=(10+parseInt(tWidth))+"px"; mq.innerHTML='<span id="tx">'+content+'<\/span>'; aw = document.getElementById("tx").offsetWidth; lefttime=setInterval("scrollticker()",50);}} function scrollticker(){mq.style.right = (parseInt(mq.style.right)>(-10 - aw)) ?
mq.style.right = parseInt(mq.style.right)+cps+"px": parseInt(tWidth)+10+"px";} window.onload=startticker;
</script>
</head>
<body>
<div id="ticker">
    this is a simple scrolling text!
</div>
</body>
</html>
6个回答

来自上述评论中的建议的hiya简单演示http : //jsfiddle.net/FWWEn/

鼠标悬停时具有暂停功能:http : //jsfiddle.net/zrW5q/

希望这会有所帮助,祝您愉快,干杯!

html

<h1>Hello World!</h1>
<h2>I'll marquee twice</h2>
<h3>I go fast!</h3>
<h4>Left to right</h4>
<h5>I'll defer that question</h5>​

查询代码

 (function($) {
        $.fn.textWidth = function(){
             var calc = '<span style="display:none">' + $(this).text() + '</span>';
             $('body').append(calc);
             var width = $('body').find('span:last').width();
             $('body').find('span:last').remove();
            return width;
        };

        $.fn.marquee = function(args) {
            var that = $(this);
            var textWidth = that.textWidth(),
                offset = that.width(),
                width = offset,
                css = {
                    'text-indent' : that.css('text-indent'),
                    'overflow' : that.css('overflow'),
                    'white-space' : that.css('white-space')
                },
                marqueeCss = {
                    'text-indent' : width,
                    'overflow' : 'hidden',
                    'white-space' : 'nowrap'
                },
                args = $.extend(true, { count: -1, speed: 1e1, leftToRight: false }, args),
                i = 0,
                stop = textWidth*-1,
                dfd = $.Deferred();

            function go() {
                if(!that.length) return dfd.reject();
                if(width == stop) {
                    i++;
                    if(i == args.count) {
                        that.css(css);
                        return dfd.resolve();
                    }
                    if(args.leftToRight) {
                        width = textWidth*-1;
                    } else {
                        width = offset;
                    }
                }
                that.css('text-indent', width + 'px');
                if(args.leftToRight) {
                    width++;
                } else {
                    width--;
                }
                setTimeout(go, args.speed);
            };
            if(args.leftToRight) {
                width = textWidth*-1;
                width++;
                stop = offset;
            } else {
                width--;            
            }
            that.css(marqueeCss);
            go();
            return dfd.promise();
        };
    })(jQuery);

$('h1').marquee();
$('h2').marquee({ count: 2 });
$('h3').marquee({ speed: 5 });
$('h4').marquee({ leftToRight: true });
$('h5').marquee({ count: 1, speed: 2 }).done(function() { $('h5').css('color', '#f00'); })​
此实现是否允许环绕大量文本?我发现/尝试的一切似乎都在等待文本离开屏幕并重新开始,而不是无缝连接。
2021-04-03 15:27:55
这段代码看起来很棒并且在 jsfiddle 中运行良好,但是当我尝试在本地运行它时,它似乎不起作用?有任何想法吗? pastebin.com/iDSgpJDy
2021-04-04 15:27:55
Hiya @Derp 我希望你在你的页面中包含了这样的 Jquery src,<script type='text/javascript' src='http://code.jquery.com/jquery-1.5.js'></script>并且 Jquery 代码将进入<script> </script>标签,让我知道它是怎么回事!干杯
2021-04-06 15:27:55
@Derp 你可以在这里用 1.7.2 版本在 jsfiddle演示中复制jsfiddle.net/xYdBj我不确定如果我能在粘贴箱中看到输出,请加油!
2021-04-09 15:27:55
是的,请查看我在第一条评论中链接的 pastebin, pastebin.com/iDSgpJDy 我使用的是 1.7.js,但不是 1.5,我通过脚本标签嵌入它。不知道出了什么问题
2021-04-10 15:27:55

我为选框制作了非常简单的功能。请参阅:http : //jsfiddle.net/vivekw/pHNpk/2/ 它在鼠标悬停时暂停并在鼠标离开时恢复。速度可以变化。容易明白。

function marquee(a, b) {
var width = b.width();
var start_pos = a.width();
var end_pos = -width;

function scroll() {
    if (b.position().left <= -width) {
        b.css('left', start_pos);
        scroll();
    }
    else {
        time = (parseInt(b.position().left, 10) - end_pos) *
            (10000 / (start_pos - end_pos)); // Increase or decrease speed by changing value 10000
        b.animate({
            'left': -width
        }, time, 'linear', function() {
            scroll();
        });
    }
}

b.css({
    'width': width,
    'left': start_pos
});
scroll(a, b);
b.mouseenter(function() {     // Remove these lines
    b.stop();                 //
    b.clearQueue();           // if you don't want
});                           //
b.mouseleave(function() {     // marquee to pause
    scroll(a, b);             //
});                           // on mouse over
}

$(document).ready(function() {
    marquee($('#display'), $('#text'));  //Enter name of container element & marquee element
});
如果你给你的参数命名,它会更容易理解。
2021-03-17 15:27:55

我刚刚为此创建了一个简单的 jQuery 插件。试试看 ;)

https://github.com/aamirafridi/jQuery.Marquee

现在试试。一点点改善。CSS3 后备即将推出 ;)
2021-03-21 15:27:55
链接有效。然而,剧本非常断断续续。我推荐柔滑的选框代替
2021-03-28 15:27:55
@Onimusha 该插件现在支持 CSS3,并且现在更加流畅。
2021-04-02 15:27:55
按照aamirafridi.com/jquery/jquery-marquee-plugin 上显示的说明进行操作您没有将 CSS 应用于选取框元素。
2021-04-04 15:27:55
我为 rawgithub 链接得到了这个:This request has been blacklisted. Stop abusing rawgithub.com or worse things will happen soon.你有另一个链接我可以使用这些更新吗?
2021-04-08 15:27:55

以下工作:

http://jsfiddle.net/xAGRJ/4/

原始代码的问题是您scrollticker()通过将字符串传递给 来调用setInterval,您应该只传递函数名称并将其视为变量:

lefttime = setInterval(scrollticker, 50);

代替

lefttime = setInterval("scrollticker()", 50);
@Derp 兄弟,如果这解决了你的问题,至少接受他的回答:) 只是一个观察,放轻松 :),干杯!
2021-03-14 15:27:55
这将影响变量的范围,作为字符串传递将使用可以访问变量的不同范围,而使用 setTimeout 和函数变量引用范围将无法访问相同的变量。一些重构可能会修复它,但这通常需要重写字符串版本可以正常工作的地方。我仍然想知道 requestAnimationFrame 或 jquery animate 是否可能比在 timout-set 帧率上循环递增更平滑......平滑似乎是任何超时迭代动画帧的问题。
2021-03-17 15:27:55
好吧,我修复了一个,它导致了另一个,tSpeed not defined可能在这里 - 不过onmouseout="cps=-tSpeed"我现在正在尝试修复它。
2021-04-01 15:27:55

为什么要为 Marquee 编写自定义 jQuery 代码...只需使用 jQuery 插件 - marquee() 并像下面的示例一样使用它:

首先包括:

<script type='text/javascript' src='//cdn.jsdelivr.net/jquery.marquee/1.3.1/jquery.marquee.min.js'></script>

接着:

//proporcional speed counter (for responsive/fluid use)
var widths = $('.marquee').width()
var duration = widths * 7;

$('.marquee').marquee({
    //speed in milliseconds of the marquee
    duration: duration, // for responsive/fluid use
    //duration: 8000, // for fixed container
    //gap in pixels between the tickers
    gap: $('.marquee').width(),
    //time in milliseconds before the marquee will start animating
    delayBeforeStart: 0,
    //'left' or 'right'
    direction: 'left',
    //true or false - should the marquee be duplicated to show an effect of continues flow
    duplicated: true
});

如果你能让它更简单、更好,我敢于你们所有人:)。不要让你的生活变得比它应该的更困难。有关此插件及其功能的更多信息,请访问:http : //aamirafridi.com/jquery/jquery-marquee-plugin

这不适用于 IE 10 及更高版本。很奇怪。也许有人可以指出一些修复或解决方法?我被迫使用 jquery 1.5.1
2021-03-16 15:27:55