你如何在jQuery中使元素“闪光”?

我是jQuery的新手,并且有一些使用Prototype的经验。 在Prototype中,有一种方法可以“闪现”一个元素 – 即。 用另一种颜色简单地突出显示,并使其褪色恢复正常,以便吸引用户的注意力。 jQuery中有这样的方法吗? 我看到fadeIn,fadeOut和animation,但我没有看到任何像“闪光灯”。 也许这三个中的一个可以用于适当的投入?

我的方法是.fadein,.fadeout .fadein,.fadeout ……

 $("#someElement").fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100).fadeIn(100); 

你可以使用jQuery Color插件 。

例如,要引起对页面上的所有div的关注,可以使用以下代码:

 $("div").stop().css("background-color", "#FFFF9C") .animate({ backgroundColor: "#FFFFFF"}, 1500); 

编辑 – 新的和改进

以下使用与上述相同的技术,但它具有以下附加好处:

  • 参数化高亮颜色和持续时间
  • 保留原始的背景颜色,而不是假设它是白色的
  • 作为jQuery的扩展,所以你可以在任何对象上使用它

扩展jQuery对象:

 var notLocked = true; $.fn.animateHighlight = function(highlightColor, duration) { var highlightBg = highlightColor || "#FFFF9C"; var animateMs = duration || 1500; var originalBg = this.css("backgroundColor"); if (notLocked) { notLocked = false; this.stop().css("background-color", highlightBg) .animate({backgroundColor: originalBg}, animateMs); setTimeout( function() { notLocked = true; }, animateMs); } }; 

用法示例:

 $("div").animateHighlight("#dd0000", 1000); 

你可以使用css3animation来刷新一个元素

 .flash { -moz-animation: flash 1s ease-out; -moz-animation-iteration-count: 1; -webkit-animation: flash 1s ease-out; -webkit-animation-iteration-count: 1; -ms-animation: flash 1s ease-out; -ms-animation-iteration-count: 1; } @keyframes flash { 0% { background-color: transparent; } 50% { background-color: #fbf8b2; } 100% { background-color: transparent; } } @-webkit-keyframes flash { 0% { background-color: transparent; } 50% { background-color: #fbf8b2; } 100% { background-color: transparent; } } @-moz-keyframes flash { 0% { background-color: transparent; } 50% { background-color: #fbf8b2; } 100% { background-color: transparent; } } @-ms-keyframes flash { 0% { background-color: transparent; } 50% { background-color: #fbf8b2; } 100% { background-color: transparent; } } 

而你jQuery来添加类

 jQuery(selector).addClass("flash"); 

5年后…(并没有额外的插件需要)

这个“脉冲”到你想要的颜色(例如白色), 把背景颜色放在它后面,然后淡出对象

HTML对象(例如button):

 <div style="background: #fff;"> <input type="submit" class="element" value="Whatever" /> </div> 

jQuery (香草,没有其他插件):

 $('.element').fadeTo(100, 0.3, function() { $(this).fadeTo(500, 1.0); }); 

元素 – 类名称

fadeTo() 第一个数字 – 转换的毫秒数

fadeTo() 第二个数字 – 淡入/淡出后对象的不透明度

您可以在此网页的右下angular查看: https : //www.majalmirasol.com/v1/

通过使用$(this) 编辑 (willsteel)没有重复的select器,并调整值以执行一个闪存(如OP请求)。

我猜,你可以在jQuery UI中使用高亮效果来达到同样的效果 。

如果你使用的是jQueryUI,那么在UI/Effects有一个pulsate函数

 $("div").click(function () { $(this).effect("pulsate", { times:3 }, 2000); }); 

http://docs.jquery.com/UI/Effects/Pulsate

你可以使用这个插件(把它放在一个js文件中并通过脚本标签来使用它)

http://plugins.jquery.com/project/color

然后使用这样的东西:

 jQuery.fn.flash = function( color, duration ) { var current = this.css( 'color' ); this.animate( { color: 'rgb(' + color + ')' }, duration / 2 ); this.animate( { color: current }, duration / 2 ); } 

这为所有jQuery对象添加了一个“flash”方法:

 $( '#importantElement' ).flash( '255,0,0', 1000 ); 
 $('#district').css({opacity: 0}); $('#district').animate({opacity: 1}, 700 ); 

你可以通过迭代计数来进一步扩展Desheng Li的方法,如下所示:

 // Extend jquery with flashing for elements $.fn.flash = function(duration, iterations) { duration = duration || 1000; // Default to 1 second iterations = iterations || 1; // Default to 1 iteration var iterationDuration = Math.floor(duration / iterations); for (var i = 0; i < iterations; i++) { this.fadeOut(iterationDuration).fadeIn(iterationDuration); } return this; } 

然后你可以调用闪烁的时间和数量的方法:

 $("#someElementId").flash(1000, 4); // Flash 4 times over a period of 1 second 

纯粹的jQuery解决scheme。

(没有jquery-ui /animation/颜色需要。)

如果你想要的是没有加载jQuery颜色的黄色“闪光灯”效果:

 var flash = function(elements) { var opacity = 100; var color = "255, 255, 20" // has to be in this format since we use rgba var interval = setInterval(function() { opacity -= 3; if (opacity <= 0) clearInterval(interval); $(elements).css({background: "rgba("+color+", "+opacity/100+")"}); }, 30) }; 

上面的脚本只是简单地做了黄色淡出,让用户知道元素被更新或者类似的东西。

用法:

 flash($('#your-element')) 

这可能是一个更新的答案,并且比较短,因为这个post之后有些东西已经被巩固了。 需要jquery-ui-effect-highlight

 $("div").click(function () { $(this).effect("highlight", {}, 3000); }); 

http://docs.jquery.com/UI/Effects/Highlight

我不能相信这个问题还没有解决。 所有你必须做的:

 ("#someElement").show('highlight',{color: '#C8FB5E'},'fast'); 

这正是你想要的,超级简单,适用于show()hide()方法。

会的 脉冲效应 (离线)JQuery插件适合你在找什么?

您可以添加一个持续时间来限制脉冲效应。


JP在评论中提到,现在有更新的脉冲插件 。
看到他的GitHub回购 。 这里是一个演示 。

如何一个非常简单的答案?

$('selector').fadeTo('fast',0).fadeTo('fast',1).fadeTo('fast',0).fadeTo('fast',1)

眨眼两次…这是所有的人!

以下代码适用于我。 定义两个淡入和淡出函数,并把它们放在彼此的callback中。

 var fIn = function() { $(this).fadeIn(300, fOut); }; var fOut = function() { $(this).fadeOut(300, fIn); }; $('#element').fadeOut(300, fIn); 

以下控制闪光次数:

 var count = 3; var fIn = function() { $(this).fadeIn(300, fOut); }; var fOut = function() { if (--count > 0) $(this).fadeOut(300, fIn); }; $('#element').fadeOut(300, fIn); 

后来发现了这么多月亮,但如果有人关心,这似乎是一个很好的方式来永久闪光:

 $( "#someDiv" ).hide(); setInterval(function(){ $( "#someDiv" ).fadeIn(1000).fadeOut(1000); },0) 

我正在寻找这个问题的解决scheme,但不依赖于jQuery UI。

这是我想出来的,它适用于我(无插件,只是Javascript和jQuery); – inheritance人的工作小提琴 – http://jsfiddle.net/CriddleCraddle/yYcaY/2/

在你的CSS文件中设置当前的CSS参数为正常的CSS,并创build一个新的类,只是处理参数改变背景颜色,并将其设置为'!重要'来覆盖默认行为。 喜欢这个…

 .button_flash { background-color: #8DABFF !important; }//This is the color to change to. 

然后,只需使用下面的函数,并将DOM元素作为一个string传入,一个整数表示您希望闪存发生的次数,您想要更改的类以及一个用于延迟的整数。

注意:如果你为“时间”variables传递一个偶数,那么你最终会得到你开始使用的类,如果你传递了一个奇数,你将最终得到切换的类。 两者对于不同的事物都有用。 我用'我'来改变延迟时间,或者他们都会同时开火,效果就会丢失。

 function flashIt(element, times, klass, delay){ for (var i=0; i < times; i++){ setTimeout(function(){ $(element).toggleClass(klass); }, delay + (300 * i)); }; }; //Then run the following code with either another delay to delay the original start, or // without another delay. I have provided both options below. //without a start delay just call flashIt('.info_status button', 10, 'button_flash', 500) //with a start delay just call setTimeout(function(){ flashIt('.info_status button', 10, 'button_flash', 500) }, 4700); // Just change the 4700 above to your liking for the start delay. In this case, //I need about five seconds before the flash started. 

像淡入淡出,你可以使用animationCSS /延迟

 $(this).stop(true, true).animate({opacity: 0.1}, 100).delay(100).animate({opacity: 1}, 100).animate({opacity: 0.1}, 100).delay(100).animate({opacity: 1}, 100); 

简单而灵活

有一个解决方法的animation背景错误。 这个要点包括一个简单的高亮方法和它的使用的例子。

 /* BEGIN jquery color */ (function(jQuery){jQuery.each(['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor'],function(i,attr){jQuery.fx.step[attr]=function(fx){if(!fx.colorInit){fx.start=getColor(fx.elem,attr);fx.end=getRGB(fx.end);fx.colorInit=true;} fx.elem.style[attr]="rgb("+[Math.max(Math.min(parseInt((fx.pos*(fx.end[0]-fx.start[0]))+fx.start[0]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[1]-fx.start[1]))+fx.start[1]),255),0),Math.max(Math.min(parseInt((fx.pos*(fx.end[2]-fx.start[2]))+fx.start[2]),255),0)].join(",")+")";}});function getRGB(color){var result;if(color&&color.constructor==Array&&color.length==3) return color;if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) return[parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) return[parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) return[parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)];if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) return[parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)];if(result=/rgba\(0, 0, 0, 0\)/.exec(color)) return colors['transparent'];return colors[jQuery.trim(color).toLowerCase()];} function getColor(elem,attr){var color;do{color=jQuery.curCSS(elem,attr);if(color!=''&&color!='transparent'||jQuery.nodeName(elem,"body")) break;attr="backgroundColor";}while(elem=elem.parentNode);return getRGB(color);};var colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};})(jQuery); /* END jquery color */ /* BEGIN highlight */ jQuery(function() { $.fn.highlight = function(options) { options = (options) ? options : {start_color:"#ff0",end_color:"#fff",delay:1500}; $(this).each(function() { $(this).stop().css({"background-color":options.start_color}).animate({"background-color":options.end_color},options.delay); }); } }); /* END highlight */ /* BEGIN highlight example */ $(".some-elements").highlight(); /* END highlight example */ 

https://gist.github.com/1068231

如果在这里包括一个图书馆是一个矫枉过正的解决scheme,保证工作。

 $('div').click(function() { $(this).css('background-color','#FFFFCC'); setTimeout(function() { $(this).fadeOut('slow').fadeIn('slow'); } , 1000); setTimeout(function() { $(this).css('background-color','#FFFFFF'); } , 1000); }); 
  1. 设置事件触发器
  2. 设置块元素的背景颜色
  3. 在setTimeout里面使用fadeOut和fadeIn来创build一个小animation效果。
  4. 里面第二个setTimeout重置默认背景颜色

    testing在几个浏览器,它很好地工作。

不幸的是,最好的答案需要JQuery UI。 http://api.jquery.com/animate/

这是一个香草JQuery解决scheme

http://jsfiddle.net/EfKBg/

JS

 var flash = "<div class='flash'></div>"; $(".hello").prepend(flash); $('.flash').show().fadeOut('slow'); 

CSS

 .flash { background-color: yellow; display: none; position: absolute; width: 100%; height: 100%; } 

HTML

 <div class="hello">Hello World!</div> 
 function pulse() { $('.blink').fadeIn(300).fadeOut(500); } setInterval(pulse, 1000); 

这是colbeerhey解决scheme的一个稍微改进的版本。 我添加了一个return语句,以真正的jQueryforms,我们在调用animation之后链接事件。 我还添加了参数来清除队列并跳转到animation的结尾。

 // Adds a highlight effect $.fn.animateHighlight = function(highlightColor, duration) { var highlightBg = highlightColor || "#FFFF9C"; var animateMs = duration || 1500; this.stop(true,true); var originalBg = this.css("backgroundColor"); return this.css("background-color", highlightBg).animate({backgroundColor: originalBg}, animateMs); }; 

这个将脉动一个元素的背景颜色,直到一个mouseover事件被触发

 $.fn.pulseNotify = function(color, duration) { var This = $(this); console.log(This); var pulseColor = color || "#337"; var pulseTime = duration || 3000; var origBg = This.css("background-color"); var stop = false; This.bind('mouseover.flashPulse', function() { stop = true; This.stop(); This.unbind('mouseover.flashPulse'); This.css('background-color', origBg); }) function loop() { console.log(This); if( !stop ) { This.animate({backgroundColor: pulseColor}, pulseTime/3, function(){ This.animate({backgroundColor: origBg}, (pulseTime/3)*2, 'easeInCirc', loop); }); } } loop(); return This; } 

把所有这些放在一起 – 一个简单的解决scheme闪烁一个元素,并返回到原来的bgcolour …

 $.fn.flash = function (highlightColor, duration, iterations) { var highlightBg = highlightColor || "#FFFF9C"; var animateMs = duration || 1500; var originalBg = this.css('backgroundColor'); var flashString = 'this'; for (var i = 0; i < iterations; i++) { flashString = flashString + '.animate({ backgroundColor: highlightBg }, animateMs).animate({ backgroundColor: originalBg }, animateMs)'; } eval(flashString); } 

像这样使用:

 $('<some element>').flash('#ffffc0', 1000, 3); 

希望这可以帮助!

只要给elem.fadeOut(10).fadeIn(10);

 $("#someElement").fadeTo(3000, 0.3 ).fadeTo(3000, 1).fadeTo(3000, 0.3 ).fadeTo(3000, 1); 

3000是3秒

从不透明度1到0.3,然后是1,依此类推。

你可以叠加更多这些。

只有jQuery是必要的。 🙂

我正在使用这个。 虽然尚未在所有浏览器上进行testing。 只要以你喜欢的方式修改这个,

用法: hlight($("#mydiv"));

 function hlight(elementid){ var hlight= "#fe1414"; //set the hightlight color var aspeed= 2000; //set animation speed var orig= "#ffffff"; // set default background color elementid.stop().css("background-color", hlight).animate({backgroundColor: orig}, aspeed); } 

注:你需要一个jQuery UI添加到您的标题。

此function使其闪烁。 它必须使用cssHooks,因为rgb默认返回背景色function。

希望能帮助到你!

 $.cssHooks.backgroundColor = { get: function(elem) { if (elem.currentStyle) var bg = elem.currentStyle["backgroundColor"]; else if (window.getComputedStyle) var bg = document.defaultView.getComputedStyle(elem, null).getPropertyValue("background-color"); if (bg.search("rgb") == -1) return bg; else { bg = bg.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); function hex(x) { return ("0" + parseInt(x).toString(16)).slice(-2); } return "#" + hex(bg[1]) + hex(bg[2]) + hex(bg[3]); } } } function blink(element,blinkTimes,color,originalColor){ var changeToColor; if(blinkTimes === null || blinkTimes === undefined) blinkTimes = 1; if(!originalColor || originalColor === null || originalColor === undefined) originalColor = $(element).css("backgroundColor"); if(!color || color === null || color === undefined) color = "#ffffdf"; if($(element).css("backgroundColor") == color){ changeToColor = originalColor; }else{ changeToColor = color; --blinkTimes; } if(blinkTimes >= 0){ $(element).animate({ "background-color": changeToColor, }, { duration: 500, complete: function() { blink(element, blinkTimes, color, originalColor); return true; } }); }else{ $(element).removeAttr("style"); } return true; } 

最简单的就是这样做:

 <script> setInterval(function(){ $(".flash-it").toggleClass("hide"); },700) </script>