Желтый эффект затухания с JQuery

Я хотел бы реализовать нечто похожее на 37Signals Yellow Fade effect.

Я использую JQuery 1.3.2

Код

(function($) {
   $.fn.yellowFade = function() {
    return (this.css({backgroundColor: "#ffffcc"}).animate(
            {
                backgroundColor: "#ffffff"
            }, 1500));
   }
 })(jQuery);

а следующий вызов показывает, что желтый цвет исчезает с идентификатором DOM с идентификатором окна.

$("#box").yellowFade();

Но это только делает его желтым. Без белого фона после 15000 миллисекунд.

Любая идея, почему она не работает?

Решение

Вы можете использовать:

$("#box").effect("highlight", {}, 1500);

Но вам нужно будет включить:

effects.core.js
effects.highlight.js

Ответ 1

Эта функция является частью jQuery effects.core.js:

$("#box").effect("highlight", {}, 1500);

Как заметил Стирпайк в комментариях, effects.core.js и effects.highlight.js необходимо включить, чтобы использовать это.

Ответ 2

Библиотека эффектов jQuery добавляет в приложение довольно много лишних накладных расходов. Вы можете выполнить одно и то же с помощью jQuery. http://jsfiddle.net/x2jrU/92/

jQuery.fn.highlight = function() {
   $(this).each(function() {
        var el = $(this);
        el.before("<div/>")
        el.prev()
            .width(el.width())
            .height(el.height())
            .css({
                "position": "absolute",
                "background-color": "#ffff99",
                "opacity": ".9"   
            })
            .fadeOut(500);
    });
}

$("#target").highlight();

Ответ 3

Мне понравился ответ Стерлинга Николса, поскольку он был легким и не требовал плагина. Однако я обнаружил, что он не работает с плавающими элементами (например, когда элемент "float: right" ). Поэтому я переписал код, чтобы правильно отображать выделение независимо от того, как элемент расположен на странице:

jQuery.fn.highlight = function () {
    $(this).each(function () {
        var el = $(this);
        $("<div/>")
        .width(el.outerWidth())
        .height(el.outerHeight())
        .css({
            "position": "absolute",
            "left": el.offset().left,
            "top": el.offset().top,
            "background-color": "#ffff99",
            "opacity": ".7",
            "z-index": "9999999"
        }).appendTo('body').fadeOut(1000).queue(function () { $(this).remove(); });
    });
}

Дополнительно:
Используйте следующий код, если вы также хотите сопоставить граничный радиус элемента:

jQuery.fn.highlight = function () {
    $(this).each(function () {
        var el = $(this);
        $("<div/>")
        .width(el.outerWidth())
        .height(el.outerHeight())
        .css({
            "position": "absolute",
            "left": el.offset().left,
            "top": el.offset().top,
            "background-color": "#ffff99",
            "opacity": ".7",
            "z-index": "9999999",
            "border-top-left-radius": parseInt(el.css("borderTopLeftRadius"), 10),
            "border-top-right-radius": parseInt(el.css("borderTopRightRadius"), 10),
            "border-bottom-left-radius": parseInt(el.css("borderBottomLeftRadius"), 10),
            "border-bottom-right-radius": parseInt(el.css("borderBottomRightRadius"), 10)
        }).appendTo('body').fadeOut(1000).queue(function () { $(this).remove(); });
    });
}

Ответ 4

(function($) {
  $.fn.yellowFade = function() {
    this.animate( { backgroundColor: "#ffffcc" }, 1 ).animate( { backgroundColor: "#ffffff" }, 1500 );
  }
})(jQuery);

Должен сделать трюк. Установите его на желтый, затем потушите его до белого.

Ответ 5

Я только что решил проблему, подобную этой, над проектом, над которым я работал. По умолчанию функция анимации не может анимировать цвета. Попробуйте включить jQuery Color Animations.

Все ответы здесь используют этот плагин, но никто не упоминает об этом.

Ответ 6

Определите свой CSS следующим образом:

@-webkit-keyframes yellowfade {
    from { background: yellow; }
    to { background: transparent; }
}

@-moz-keyframes yellowfade {
    from { background: yellow; }
    to { background: transparent; }
}

.yft {
    -webkit-animation: yellowfade 1.5s;
       -moz-animation: yellowfade 1.5s;
            animation: yellowfade 1.5s;
}

И просто добавьте класс yft к любому элементу $('.some-item').addClass('yft')

Демо: http://jsfiddle.net/Q8KVC/528/

Ответ 7

На самом деле, у меня есть решение, для которого требуется только jQuery 1.3x, и никакого плагина aditionnal.

Сначала добавьте следующие функции в script

function easeInOut(minValue,maxValue,totalSteps,actualStep,powr) {
    var delta = maxValue - minValue;
    var stepp = minValue+(Math.pow(((1 / totalSteps)*actualStep),powr)*delta);
    return Math.ceil(stepp)
}

function doBGFade(elem,startRGB,endRGB,finalColor,steps,intervals,powr) {
    if (elem.bgFadeInt) window.clearInterval(elem.bgFadeInt);
    var actStep = 0;
    elem.bgFadeInt = window.setInterval(
        function() {
            elem.css("backgroundColor", "rgb("+
                easeInOut(startRGB[0],endRGB[0],steps,actStep,powr)+","+
                easeInOut(startRGB[1],endRGB[1],steps,actStep,powr)+","+
                easeInOut(startRGB[2],endRGB[2],steps,actStep,powr)+")"
            );
            actStep++;
            if (actStep > steps) {
            elem.css("backgroundColor", finalColor);
            window.clearInterval(elem.bgFadeInt);
            }
        }
        ,intervals)
}

Затем вызовите функцию, используя следующую команду:

doBGFade( $(selector),[245,255,159],[255,255,255],'transparent',75,20,4 );

Я дам вам угадать параметры, они довольно понятны. Честно говоря, script не от меня, я взял его на странице и изменил его, чтобы он работал с последним jQuery.

NB: проверено на firefox 3 и ie 6 (да, это работает и на этой старой вещи)

Ответ 8

function YellowFade(selector){
   $(selector)
      .css('opacity', 0)
      .animate({ backgroundColor: 'Yellow', opacity: 1.0 }, 1000)
      .animate({ backgroundColor: '#ffffff', opacity: 0.0}, 350, function() {
             this.style.removeAttribute('filter');
              });
}

Линия this.style.removeAttribute('filter') предназначена для ошибки сглаживания в IE.

Теперь вызовите функцию YellowFade откуда угодно и передайте селектор

YellowFade('#myDivId');

Кредит. У Фила Хаака была демонстрация, показывающая, как это сделать. Он делал демонстрацию в JQuery и ASPNet MVC.

Посмотрите на это видео

Обновление. Вы посмотрели видео? Для этого требуется плагин JQuery.Color

Ответ 9

Я ненавидел добавление 23kb только для добавления эффектов .core.js и effects.highlight.js, поэтому я написал следующее. Он эмулирует поведение, используя fadeIn (который является частью самого jQuery) для "flash" элемента:

$.fn.faderEffect = function(options){
    options = jQuery.extend({
        count: 3, // how many times to fadein
        speed: 500, // spped of fadein
        callback: false // call when done
    }, options);

    return this.each(function(){

        // if we're done, do the callback
        if (0 == options.count) 
        {
            if ( $.isFunction(options.callback) ) options.callback.call(this);
            return;
        }

        // hide so we can fade in
        if ( $(this).is(':visible') ) $(this).hide();

        // fade in, and call again
        $(this).fadeIn(options.speed, function(){
            options.count = options.count - 1; // countdown
            $(this).faderEffect(options); 
        });
    });
}

затем вызовите его с помощью $('. item'). faderEffect();

Ответ 10

Это мое решение проблемы. он отлично работает. он передает проверку ошибок jslint, а также работает достойно в IE8 и IE9. Конечно, вы можете настроить его, чтобы принимать цветовые коды и обратные вызовы:

jQuery.fn.highlight = function(level) {

  highlightIn = function(options){

    var el = options.el;
    var visible = options.visible !== undefined ? options.visible : true;

    setTimeout(function(){
      if (visible) {
        el.css('background-color', 'rgba('+[255, 64, 64]+','+options.iteration/10+')');
        if (options.iteration/10 < 1) {
          options.iteration += 2;
          highlightIn(options);
        }
      } else {
        el.css('background-color', 'rgba('+[255, 64, 64]+','+options.iteration/10+')');
        if (options.iteration/10 > 0) {
          options.iteration -= 2;
          highlightIn(options);
        } else {
          el.css('background-color', '#fff');
        }
      }
    }, 50);
  };

  highlightOut = function(options) {
    options.visible = false;
    highlightIn(options);
  };

  level = typeof level !== 'undefined' ? level : 'warning';
  highlightIn({'iteration': 1, 'el': $(this), 'color': level});
  highlightOut({'iteration': 10, 'el': $(this), 'color': level});
};

Ответ 11

Это параметр, отличный от jQuery, который вы можете использовать для эффекта затухания цвета. В массиве "colors" вы добавляете цвета перехода, которые вам нужны, от начального цвета до последнего цвета. Вы можете добавить столько цветов, сколько хотите.

   <html lang="en">
   <head>
   <script type="text/javascript">
  //###Face Effect for a text box#######

var targetColor;
var interval1;
var interval2;
var i=0;
var colors = ["#FFFF00","#FFFF33","#FFFF66","#FFFF99","#FFFFCC","#FFFFFF"];

function changeColor(){
    if (i<colors.length){
        document.getElementById("p1").style.backgroundColor=colors[i];
        i++;
    } 
    else{
        window.clearInterval(interval1);
        i=0;
    }
}
addEventListener("load",function(){
    document.getElementById("p1").addEventListener("click",function(e){
        interval1=setInterval("changeColor()",80);              

    })
});
</script>

</head>

<body>
<p id="p1">Click this text box to see the fade effect</p>

<footer>
 <p>By Jefrey Bulla</p>
</footer>
</div>
</body>
</html> 

Ответ 12

Если вы хотите попробовать альтернативную технологию желтого затухания, которая не зависит от jQuery UI.effect, вы можете поместить желтый (или другой цвет) div за свой контент и использовать jQuery.fadeOut().

http://jsfiddle.net/yFJzn/2/

<div class="yft">
    <div class="content">This is some content</div>
    <div class="yft_fade">&nbsp;</div>
</div>

<style>
  .yft_fade {
      background-color:yellow;
      display:none;
  }
  .content {
      position:absolute;
      top:0px;
  }
</style>

<script>
  $(document).ready(function() {
      $(".yft").click(function() {
          $(this).find(".yft_fade").show().fadeOut();
      });
  });​
</script>

Ответ 13

Я просто использовал...

<style>
tr.highlight {
background: #fffec6;
}
</style>


<script>
//on page load, add class
$(window).load(function() {
$("tr.table-item-id").addClass("highlight", 1200);
}); 

//fade out class
setTimeout(function(){
$("tr.table-item-id").removeClass("highlight", 1200);   
}, 5200);

</script>

Ответ 14

Простой/raw script для "желтого fadeout", нет плагинов, кроме самого jquery. Просто установите фон с rgb (255,255, highlightcolor) в таймере:

<script>

    $(document).ready(function () {
        yellowFadeout();
    });

    function yellowFadeout() {
        if (typeof (yellowFadeout.timer) == "undefined")
            yellowFadeout.timer = setInterval(yellowFadeout, 50);
        if (typeof (yellowFadeout.highlightColor) == "undefined")
            yellowFadeout.highlightColor = 0;
        $(".highlight").css('background', 'rgb(255,255,' + yellowFadeout.highlightColor + ')');
        yellowFadeout.highlightColor += 10;
        if (yellowFadeout.highlightColor >= 255) {
            $(".highlight").css('background','');
            clearInterval(yellowFadeout.timer);
        }
    }
</script>