彩色开关上的动画
我在一个网站上很忙,而且它需要很丰富,所以我得到了一个颜色列表,我就像:“嘿!让我们点击某些菜单项来切换容器顶部。” 所以我决定使用jQuery数据属性:
Leden
Game
Radio
Nieuws
Home
所以我在每个项目中定义了data-color
,让我们了解实际的jQuery代码:
$(".item").click(function(){ backgroundKleur = '#' + $(this).data('color'); changeColors(backgroundKleur); $(".item").removeClass('bold-font'); $(this).addClass('bold-font'); }); function changeColors(backgroundKleur){ $("#submenu-container").css('background-color', backgroundKleur); $(".content_small_top").css('background-color', backgroundKleur)); }
但现在,当颜色开关我想淡出旧颜色并淡入新颜色时。 我尝试了各种选项,比如fadeToggle
或者同时使用slideUp
和slideDown
,但是它没有像我想要的那样工作。 有可能实现我想要的吗?
谢谢
您应该能够淡出当前元素(通过将不透明度设置为0),更新背景颜色,然后在该动画完成后淡入淡出(jquery的animate在原始动画完成时进行回调)。 我已经汇总了一个相当通用的例子来说明这一点。
$('.fader').on('mouseenter', function() { var $this = $(this); $this.animate({ opacity: 0 }, 1000, function() { $this.css('background', 'blue'); $this.animate({ opacity: 1 }); }); })
.fader { width: 150px; height: 150px; background: red; }
您可以定义一个空的@keyframes
并使用JavaScript以这种方式在点击事件上创建关键帧规则。
小提琴演示| [检查编辑-webkit-
支持]
HTML:
Red
Green
Blue
Sienna
Chocolate
Maroon
的JavaScript / jQuery的:
function findRule() { var rule; var ss = document.styleSheets; for (var i = 0; i < ss.length; ++i) { for (var j = 0; j < ss[i].cssRules.length; ++j) { rule = ss[i].cssRules[j]; if (rule.name == "changeColor" && rule.type == window.CSSRule.KEYFRAMES_RULE) { return rule; } } } } var cssRule = findRule(); $('.item').click(function () { var color = $(this).attr('data-color'); cssRule.appendRule("0% {color: " + $(this).css('color') + "; }"); cssRule.appendRule("50% {color: white;}"); cssRule.appendRule("100% { color: " + color + "; }"); $('.item').removeClass('animate'); $(this).addClass('animate'); $('.animate').css({ 'color': color }); });
CSS:
@-moz-keyframes changeColor { } .animate { animation: changeColor 2s 1; } div { font-size: 20px; }
<----------------------------- [编辑 - 增加了对-webit-
browsers的支持] --------- ----------------------->
小提琴上的演示
的JavaScript / jQuery的:
function findRule() { var rule; var ss = document.styleSheets; for (var i = 0; i < ss.length; ++i) { for (var j = 0; j < ss[i].cssRules.length; ++j) { rule = ss[i].cssRules[j]; if (rule.name == "changeColor" && rule.type == window.CSSRule.WEBKIT_KEYFRAMES_RULE) { return { r: rule, type: 'webkit' }; } if (rule.name == "changeColor" && rule.type == window.CSSRule.KEYFRAMES_RULE) { return { r: rule, type: '' }; } } } } var cssRule = findRule(); $('.item').click(function () { var color = $(this).attr('data-color'); if (cssRule.type == 'webkit') { cssRule.r.insertRule("0% {color: " + $(this).css('color') + "; }"); cssRule.r.insertRule("50% {color: white;}"); cssRule.r.insertRule("100% { color: " + color + "; }"); } else { cssRule.r.appendRule("0% {color: " + $(this).css('color') + "; }"); cssRule.r.appendRule("50% {color: white;}"); cssRule.r.appendRule("100% { color: " + color + "; }"); } $('.item').removeClass('animate'); $(this).addClass('animate'); $('.animate').css({ 'color': color }); });