在jQuery Advanced News Ticker中防止循环(分叉/修改)

时间:2019-07-17 01:12:13

标签: javascript jquery news-ticker

我意识到这个问题相当小众,应该以github或其他方式针对作者。

但是,该插件已超过5年没有更新,作为一个相对简单的插件,我正在尝试对其进行修改,以使其在Previous时防止其循环元素或点击Next

查看此处的工作示例:

https://jsfiddle.net/zwb1vr96/2/

如您所见,在Previous上按下1按钮会将其移至3

类似地,如果它位于3上,然后单击Next,它将循环回到1

从小提琴中可以看出,我在插件函数中提供了一个长度变量(var listlength = $("#newsticker li").length;),该变量告诉我列表中有多少列表(或li)项。

下一个修改必须在以下几行之内:

 if(this.options.nextButton && typeof(this.options.nextButton[0]) !== 'undefined')
                                this.options.nextButton.click(function(e) {
                                        this.moveNext();
                                        this.resetInterval();
                                }.bind(this));
 if(this.options.prevButton && typeof(this.options.prevButton[0]) !== 'undefined')
                                this.options.prevButton.click(function(e) {
                                        this.movePrev();
                                        this.resetInterval();
                                }.bind(this));

但是我仍然坚持这样的事实,即该插件通过定义集合height而起作用,并且不会修改看不见的li项。

这就是我要尝试的:

添加一个var count = 0;

并点击next按钮

                            this.options.nextButton.click(function(e) {
                         if (count == 3) { return false; }
                            else { count++; }

以及上一个按钮

  this.options.prevButton.click(function(e) {
                                if (count == 0) { return false; }
                                else { count--; }

它在一定程度上有效-但仍然存在问题,并且没有给出适当的计数以返回false。

JsFiddle Attempt

如何在上面的这些PreviousNext脚本函数中创建一个变量,以了解其当前位于哪个列表项(在jsfiddle示例中-1,{{1} }或2),如果单击“上一个”按钮时我的列表项位于3上,则随后会阻止事件触发;如果显示了所显示的列表项,则阻止“下一步”按钮触发在1处(因此如上所述防止出现循环功能)。

2 个答案:

答案 0 :(得分:1)

您的问题是,股票行情没有选项来防止在动画时不断自动删除/追加股票行情:

enter image description here

您可能会考虑将此alternative plugin设为autoAppend,并将其设置为false,那么我希望代码在最后停止而不会循环(如果您手动控制)。

答案 1 :(得分:0)

我确实找到了一种解决方案-看起来很基本,但是至少在有限的示例中它确实起作用:

https://jsfiddle.net/8fcz9470/5/

  

js函数中的新变量

    var listlength = $("#newsticker li").length;
    var count = 1;

他们修改了Next按钮

 this.options.nextButton.click(function(e) {
                             if (count == 3) {
                             alert(count);
                             return false; 
                             }
                             else if (count < 3) { 
                             count++;
                             alert(count);
                                        this.moveNext();
                                        this.resetInterval();
                             }
                                }.bind(this));

Previous按钮

  this.options.prevButton.click(function(e) {
                                if (count == 1) { alert(count); return false; }
                                else if (count > 0) { 
                                count--; 
                                alert(count);
                                        this.movePrev();
                                        this.resetInterval();
                                        }
                                }.bind(this));

如果有人发现此方法有任何潜在问题,请随时提出更好的答案(就像我说的那样,这似乎很基本)!谢谢。

编辑:

实际上,对于动态变量,这似乎在js代码中起作用:

    . . . . . 
     Plugin.prototype = {
                    init: function() {
                        var count = 1;
                        var listlength = $("li").length;
     . . . . . 
     . . . . . 
     . . . . . 
     . . . . . 
     if (this.options.nextButton && typeof(this.options.nextButton[0]) !== 'undefined')
    this.options.nextButton.click(function(e) {
        if (count == listlength) {
            return false;
        } else if (count < listlength) {
            count++;
            this.moveNext();
            this.resetInterval();
        }
    }.bind(this));
if (this.options.prevButton && typeof(this.options.prevButton[0]) !== 'undefined')
    this.options.prevButton.click(function(e) {
        if (count == 1) {
            return false;
        } else if (count > 0) {
            count--;
            this.movePrev();
            this.resetInterval();
        }
    }.bind(this));