2010-07-15 3 views
1

나는 거기에 버그가 및 저자가 버그 수정 프로그램을 제공하기 위해 의지를 잃었다 (5 월 정도) 코멘트에 언급 http://www.makemineatriple.com/2007/10/bbcnewstickerNEED HELP. 작성자가이 jQuery 플러그인을 수정하지 않았습니다!

등으로 구현이 jQuery를 뉴스 시세 스타일 플러그인에 노력하고 있습니다.

버그 : Mac 브라우저 (Firefox, Opera 및 Safari, 모든 OSX) - 링크 (href)는 각 목록 항목이 스크롤/드러내기를 마칠 때까지 '작동하지 않습니다'. 기본적으로이 플러그인이로드 된 후 모든 a href이 작동을 멈 춥니 다.

/* 
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); 

모든 솔루션 : 여기

플러그인 ( http://plugins.jquery.com/project/BBCnewsTicker)에 대한 코드? 나는 프로그래머가 아니므로 누군가 패치 할 곳을 지적 할 수 있다면 크게 감사하겠습니다!

업데이트 : 링크가있는 것 같습니다. 표시가 비활성화됩니다. 예 :

+0

vTicker와 같은 다른 최신 플러그인을 이미 사용해 보셨습니까? –

+0

외부 xml 파일에서 읽는 티커를 원했습니다. – Maca

답변

1

방금이 게시물을 보았습니다. 나는 여전히 종목 표를지지하고 있으며 지난 7 월 이후 몇 차례 발표가있었습니다.

이 문제를 완화 할 수있는 방법은 사용자가 마우스를 가리킬 때 (예 : 클릭하는 것을 포함하여) 시세 표시를 일시 중지하고 항목 표시를 즉시 완료하는 옵션 인 '마우스를 올려 놓기'옵션입니다. 그것).

여전히 관련성이있는 경우 최신 버전에 여전히 문제가있는 경우 댓글을 통해 읽을 가치가 있습니다. 여전히 문제가있는 경우 연락을 취하시기 바랍니다 (댓글 중 하나가 내 것이고 놓친 경우 미안합니다!). "공식적인"방법은보고 된 문제를 모두 추적하는 jQuery 플러그인 사이트에 버그 보고서를 게시하는 것이지만 블로그를 통해 지원을 요청한 사람에게는 응답하려고합니다.

+0

감사합니다. 제가 확인하겠습니다. – Maca

0

문서에 ID가 news 인 요소가있는 경우 충돌이 발생할 수 있습니다.이 경우 일 수 있습니까? 난 id="news"의 발생에 대한 귀하의 HTML 문서를 검색하고 수정, 플러그인으로 적절한 매개 변수를 전달 여분의 연구가 필요 할지도 모르는 것처럼 보았다.

+0

요소와 충돌이 발생하지 않습니다. – Maca