Javascript 我需要帮助。作者已放弃修复此jQuery插件!
我正试图从中实现这个jquerynews-ticker风格的插件 正如评论中提到的(大约在5月份),有一个bug,作者失去了修复bug的意愿 错误是: 在Mac浏览器(Firefox、Opera和Safari,所有OSX)中,链接(a href)只有在每个列表项完成滚动/显示后才能“工作”。基本上,加载此插件后,所有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:/
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);