纯jQuery动画的特殊颜色过渡效果//没有ui或其他图书馆
我试图创建没有任何外部插件的jQuery颜色动画。 到目前为止,我可以设法用jQuery-ui做到这一点,但我想用pure jQuery animate()
学习这种方式
有没有可能用更少的代码和1.8上没有任何外部jQuery插件来做到这一点?
这是使用jQuery 1.7.2和ui的 jsFiddle示例
jQuery的:
var Text = $('h1'); var Box = $('.box'); Text.click(function() { Text.animate({'color':'#f00'},600) .delay(200).animate({'color':'#ff0'},600) .delay(200).animate({'color':'#000'},600); }); Box.click(function() { Box.animate({'background-color':'#f00'},600) .delay(200).animate({'background-color':'#ff0'},600) .delay(200).animate({'background-color':'#000'},600); });
如果没有插件或jquery ui,这是不可能的,据我所知,当然不能达到同样的准确度。 当然,除非您愿意使用大量的自定义编写函数,这些函数需要进行大量编码,但会产生与插件相同的结果,但需要付出更多努力和工作。
有很多插件可以使用,我非常喜欢jquery-color 。
就个人而言,我会说jquery ui是实现这一目标的最佳方式。
对不起,如果这不是我们希望的答案
编辑:
正如gautamdharmapuri所说,你可以简单地使用css函数和时间延迟或超时来改变颜色但是为了实现动画效果,你需要计算出它们之间的所有颜色,并且为了使它看起来光滑,你需要一个很多过渡。
有一个工作演示,我把这个想法放在这里http://jsfiddle.net/2EECN/21/它表明实际实现它将是相当密集的代码。
jQuery的:
$(function() { var textElem = $('h1'); var box = $('.box'); //Set up colour array colors = ["#000000", "#080000", "#100000", "#180000", "#200000", "#280000", "#300000", "#380000", "#400000", "#480000", "#500000", "#580000", "#600000", "#680000", "#700000", "#780000", "#800000", "#880000", "#900000", "#980000", "#A00000", "#A80000", "#B00000", "#B80000", "#C00000", "#C80000", "#D00000", "#D80000", "#E00000", "#E80000", "#F00000", "#F80000", "#FF0000"]; //Click event for text color textElem.click(function() { $.each(colors, function(index, color) { setTimeout(function() { textElem.css("color", color); }, 20 * index); }); }); //Click event for background color. box.click(function() { colors = ["#000000", "#080000", "#100000", "#180000", "#200000", "#280000", "#300000", "#380000", "#400000", "#480000", "#500000", "#580000", "#600000", "#680000", "#700000", "#780000", "#800000", "#880000", "#900000", "#980000", "#A00000", "#A80000", "#B00000", "#B80000", "#C00000", "#C80000", "#D00000", "#D80000", "#E00000", "#E80000", "#F00000", "#F80000", "#FF0000"]; $.each(colors, function(index, color) { setTimeout(function() { box.css("backgroundColor", color); }, 20 * index); }); }); });
在这个例子中,w3schools上的颜色只是一个hex颜色图表。 http://www.w3schools.com/cssref/css_colors.asp
改进的答案:
好吧,所以这实际上引起了我很多关于它将如何完成的兴趣,你可以通过以下示例实际看到,如果你明确地设置它,你可以更好地控制动画可以经历的周期。 http://jsfiddle.net/2EECN/21/ 。
它也看起来不错! 所以我现在说这肯定是可能的并且可以实现,但是你最好将它打包成一个扩展Animatesfunction的小插件。