Javascript 我需要帮助。作者已放弃修复此jQuery插件!

Javascript 我需要帮助。作者已放弃修复此jQuery插件!,javascript,jquery,jquery-plugins,Javascript,Jquery,Jquery Plugins,我正试图从中实现这个jquerynews-ticker风格的插件 正如评论中提到的(大约在5月份),有一个bug,作者失去了修复bug的意愿 错误是: 在Mac浏览器(Firefox、Opera和Safari,所有OSX)中,链接(a href)只有在每个列表项完成滚动/显示后才能“工作”。基本上,加载此插件后,所有a href都停止工作 以下是插件()的代码: /* 新闻代码插件(BBC新闻风格) 布莱恩·古兰,2007-2010 版本2.2 更新日期:2010-04-04 文件在http:/

我正试图从中实现这个jquerynews-ticker风格的插件

正如评论中提到的(大约在5月份),有一个bug,作者失去了修复bug的意愿

错误是: 在Mac浏览器(Firefox、Opera和Safari,所有OSX)中,链接(a href)只有在每个列表项完成滚动/显示后才能“工作”。基本上,加载此插件后,所有
a href
都停止工作

以下是插件()的代码:

/*
新闻代码插件(BBC新闻风格)
布莱恩·古兰,2007-2010
版本2.2
更新日期:2010-04-04
文件在http://www.makemineatriple.com/news-ticker-documentation/
演示http://www.makemineatriple.com/jquery/?newsTicker
使用和分发自由与此标题完整。
*/
(函数($){
var name='newsTicker';
函数runTicker(设置){
tickerData=$(settings.newsList).data('newsTicker');
if(tickerData.currentItem>tickerData.newsItemCounter){
//如果我们循环到列表中最后一项之外,请重新开始
tickerData.currentItem=0;
}
否则如果(tickerData.currentItem<0){
//如果我们在第一项之前循环,请移到最后一项
tickerData.currentItem=tickerData.newsItemCounter;
}
如果(tickerData.currentPosition==0){
if(tickerData.newsLinks[tickerData.currentItem].length>0){
$(tickerData.newsList).empty().append(“
  • ”); } 否则{ $(tickerData.newsList).empty().append(“
  • ”); } } //只有在定义为动画时才启动股票代码本身:否则它将暂停或处于手动前进状态 if(tickerData.animating){ 如果(tickerData.currentPosition%2==0){ 变量占位符=tickerData.placeHolder 1; } 否则{ 变量占位符=tickerData.placeHolder 2; } if(tickerData.currentPosition0){ $(tickerData.newsList+'li a').text(tickerText+占位符); } 否则{ $(tickerData.newsList+'li').text(tickerText+占位符); } tickerData.currentPosition++; setTimeout(函数(){runTicker(settings);settings=null;},tickerData.tickerRate); } 否则{ //我们正在处理当前项目的最后一个字母 if(tickerData.newsLinks[tickerData.currentItem].length>0){ $(tickerData.newsList+'li a').text(tickerData.newstims[tickerData.currentItem]); } 否则{ $(tickerData.newsList+'li').text(tickerData.newsItems[tickerData.currentItem]); } setTimeout(函数(){ if(tickerData.animating){ tickerData.currentPosition=0; tickerData.currentItem++; runTicker(设置);设置=null; } },tickerData.loopDelay); } } else{//settings.animating==false //显示当前项目的全文 var tickerText=tickerData.newitems[tickerData.currentItem]; if(tickerData.newsLinks[tickerData.currentItem].length>0){ $(tickerData.newsList+'li a').text(tickerText); } 否则{ $(tickerData.newsList+'li').text(tickerText); } } } //核心插件设置和配置 jQuery.fn[name]=函数(选项){ //在默认值上添加或覆盖选项 var settings=jQuery.extend({},jQuery.fn.newsTicker.defaults,options); var newitems=新数组(); var newsLinks=新数组(); var newsItemCounter=0; //隐藏静态列表项 $(settings.newsList+'li').hide(); //将项目和链接存储在数组中以供输出 $(settings.newsList+'li')。每个(函数(){ if($(this).children('a').length){ newsItems[newsItemCounter]=$(this.children('a').text(); 新闻链接[newsItemCounter]=$(this.children('a').attr('href'); } 否则{ newsItems[newsItemCounter]=$(this.text(); 新闻链接[newsItemCounter]=''; } newsItemCounter++; }); var tickerElement=$(settings.newsList);//用于下面的快速参考 TickerRelation.数据(名称{ 新闻列表:settings.newsList, tickerRate:settings.tickerRate, startDelay:settings.startDelay, loopDelay:settings.loopDelay, 占位符1:设置。占位符1, 占位符2:设置。占位符2, 控件:设置。控件, ownControls:settings.ownControls, stopOnHover:settings.stopOnHover, 新闻项目:新闻项目, 新闻链接:新闻链接, newsItemCounter:newsItemCounter-1,//-1,因为即使在最后一个项目(上面)之后,我们也增加了 当前项:0, 当前位置:0, 第一轮:1 }) .绑定({ 停止:功能(事件){ //立即显示当前项目的其余部分 tickerData=TickerRelation.data(名称); if(tickerData.animating){//仅当尚未停止时停止
    /*
    News ticker plugin (BBC news style)
    Bryan Gullan,2007-2010
    version 2.2
    updated 2010-04-04
    Documentation at http://www.makemineatriple.com/news-ticker-documentation/
    Demo at http://www.makemineatriple.com/jquery/?newsTicker
    Use and distrubute freely with this header intact.
    */
    
    (function($) {
    
        var name='newsTicker';
    
        function runTicker(settings) {
    
            tickerData = $(settings.newsList).data('newsTicker');
    
            if(tickerData.currentItem > tickerData.newsItemCounter){
                // if we've looped to beyond the last item in the list, start over
                tickerData.currentItem = 0;
            }
            else if (tickerData.currentItem < 0) {
                // if we've looped back before the first item, move to the last one
                tickerData.currentItem = tickerData.newsItemCounter;
            }
    
            if(tickerData.currentPosition == 0) {
                if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
                    $(tickerData.newsList).empty().append('<li><a href="'+ tickerData.newsLinks[tickerData.currentItem] +'"></a></li>');
                }
                else {
                    $(tickerData.newsList).empty().append('<li></li>');
                }
            }
    
            //only start the ticker itself if it's defined as animating: otherwise it's paused or under manual advance
            if (tickerData.animating) {
    
                if( tickerData.currentPosition % 2 == 0) {
                        var placeHolder = tickerData.placeHolder1;
                }
                else {
                    var placeHolder = tickerData.placeHolder2;
                }
    
                if( tickerData.currentPosition < tickerData.newsItems[tickerData.currentItem].length) {
                    // we haven't completed ticking out the current item
    
                    var tickerText = tickerData.newsItems[tickerData.currentItem].substring(0,tickerData.currentPosition);
                    if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
                        $(tickerData.newsList + ' li a').text(tickerText + placeHolder);
                    }
                    else {
                        $(tickerData.newsList + ' li').text(tickerText + placeHolder);
                    }
                    tickerData.currentPosition ++;
                    setTimeout(function(){runTicker(settings); settings = null;},tickerData.tickerRate);
                }
    
                else {
                    // we're on the last letter of the current item
    
                    if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
                        $(tickerData.newsList + ' li a').text(tickerData.newsItems[tickerData.currentItem]);
                    }
                    else {
                        $(tickerData.newsList + ' li').text(tickerData.newsItems[tickerData.currentItem]);
                    }
    
                    setTimeout(function(){
                        if (tickerData.animating) {
                            tickerData.currentPosition = 0;
                            tickerData.currentItem ++;
                            runTicker(settings); settings = null;
                        }
                    },tickerData.loopDelay);
    
                }
            }
    
            else {// settings.animating == false 
    
                // display the full text of the current item
                var tickerText = tickerData.newsItems[tickerData.currentItem];
    
                if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
                    $(tickerData.newsList + ' li a').text(tickerText);
                }
                else {
                    $(tickerData.newsList + ' li').text(tickerText);
                }
    
            }
    
        }
    
    
        // Core plugin setup and config
        jQuery.fn[name] = function(options) {
    
            // Add or overwrite options onto defaults
            var settings = jQuery.extend({}, jQuery.fn.newsTicker.defaults, options);
    
            var newsItems = new Array();
            var newsLinks = new Array();
            var newsItemCounter = 0;
    
            // Hide the static list items
            $(settings.newsList + ' li').hide();
    
            // Store the items and links in arrays for output
            $(settings.newsList + ' li').each(function(){
                if($(this).children('a').length) {
                    newsItems[newsItemCounter] = $(this).children('a').text();
                    newsLinks[newsItemCounter] = $(this).children('a').attr('href');
                }
                else {
                    newsItems[newsItemCounter] = $(this).text();
                    newsLinks[newsItemCounter] = '';
                }
                newsItemCounter ++;
            });
    
            var tickerElement = $(settings.newsList); // for quick reference below
    
            tickerElement.data(name, {
                newsList: settings.newsList,
                tickerRate: settings.tickerRate,
                startDelay: settings.startDelay,
                loopDelay: settings.loopDelay,
                placeHolder1: settings.placeHolder1,
                placeHolder2: settings.placeHolder2,
                controls: settings.controls,
                ownControls: settings.ownControls,
                stopOnHover: settings.stopOnHover,
                newsItems: newsItems,
                newsLinks: newsLinks,
                newsItemCounter: newsItemCounter - 1, // -1 because we've incremented even after the last item (above)
                currentItem: 0,
                currentPosition: 0,
                firstRun:1
            })
            .bind({
                stop: function(event) {
                    // show remainder of the current item immediately
                    tickerData = tickerElement.data(name);
                    if (tickerData.animating) { // only stop if not already stopped
                        tickerData.animating = false;
                    }
                },
                play: function(event) {
                    // show 1st item with startdelay
                    tickerData = tickerElement.data(name);
                    if (!tickerData.animating) { // if already animating, don't start animating again
                        tickerData.animating = true;
                        setTimeout(function(){runTicker(tickerData); tickerData = null;},tickerData.startDelay);
                    }
                },
                resume: function(event) {
                    // start from next item, with no delay
                    tickerData = tickerElement.data(name);
                    if (!tickerData.animating) { // if already animating, don't start animating again
                        tickerData.animating = true;
                        // set the character position as 0 to ensure on resume we start at the right point
                        tickerData.currentPosition = 0;
                        tickerData.currentItem ++;
                        runTicker(tickerData); // no delay when resuming.
                    }
                },
                next: function(event) {
                    // show whole of next item
                    tickerData = tickerElement.data(name);
                    // stop (which sets as non-animating), and call runticker
                    $(tickerData.newsList).trigger("stop");
                    // set the character position as 0 to ensure on resume we start at the right point
                    tickerData.currentPosition = 0;
                    tickerData.currentItem ++;
                    runTicker(tickerData);
                },
                previous: function(event) {
                    // show whole of previous item
                    tickerData = tickerElement.data(name);
                    // stop (which sets as non-animating), and call runticker
                    $(tickerData.newsList).trigger("stop");
                    // set the character position as 0 to ensure on resume we start at the right point
                    tickerData.currentPosition = 0;
                    tickerData.currentItem --;
                    runTicker(tickerData);
                }
            });     
            if (settings.stopOnHover) {
                tickerElement.bind({                    
                    mouseover: function(event) {
                        tickerData = tickerElement.data(name);
                        if (tickerData.animating) { // stop if not already stopped
                            $(tickerData.newsList).trigger("stop");
                            if (tickerData.controls) { // ensure that the ticker can be resumed if controls are enabled
                                $('.stop').hide();
                                $('.resume').show();
                            }
                        }
                    }
                });
            }
    
            tickerData = tickerElement.data(name);
    
            // set up control buttons if the option is on
            if (tickerData.controls || tickerData.ownControls) {
                if (!tickerData.ownControls) {
                    $('<ul class="ticker-controls"><li class="play"><a href="#play">Play</a></li><li class="resume"><a href="#resume">Resume</a></li><li class="stop"><a href="#stop">Stop</a></li><li class="previous"><a href="#previous">Previous</a></li><li class="next"><a href="#next">Next</a></li></ul>').insertAfter($(tickerData.newsList));
                }
                $('.play').hide();
                $('.resume').hide();
    
                $('.play').click(function(event){
                    $(tickerData.newsList).trigger("play");
                    $('.play').hide();
                    $('.resume').hide();
                    $('.stop').show();
                    event.preventDefault();
                });
                $('.resume').click(function(event){
                    $(tickerData.newsList).trigger("resume");
                    $('.play').hide();
                    $('.resume').hide();
                    $('.stop').show();
                    event.preventDefault();
                });
                $('.stop').click(function(event){
                    $(tickerData.newsList).trigger("stop");
                    $('.stop').hide();
                    $('.resume').show();
                    event.preventDefault();
                });
                $('.previous').click(function(event){
                    $(tickerData.newsList).trigger("previous");
                    $('.stop').hide();
                    $('.resume').show();
                    event.preventDefault();
                });
                $('.next').click(function(event){
                    $(tickerData.newsList).trigger("next");
                    $('.stop').hide();
                    $('.resume').show();
                    event.preventDefault();
                });
    
            };
    
            // tell it to play
            $(tickerData.newsList).trigger("play");
        };
    
        // News ticker defaults 
        jQuery.fn[name].defaults = {
            newsList: "#news",
            tickerRate: 80,
            startDelay: 100,
            loopDelay: 3000,
            placeHolder1: " |",
            placeHolder2: "_",
            controls: true,
            ownControls: false,
            stopOnHover: true
        }
    
    })(jQuery);