Gelber Fade-Effekt mit JQuery

100

Ich möchte etwas Ähnliches wie den Yellow Fade-Effekt von 37Signals implementieren .

Ich benutze Jquery 1.3.2

Der Code

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

und beim nächsten Aufruf zeigt gelb das DOM-Element mit der Box- ID aus.

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

Aber es macht es nur gelb. Kein weißer Hintergrund nach 15000 Millisekunden.

Irgendeine Idee, warum es nicht funktioniert?

Lösung

Sie können verwenden:

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

Aber Sie müssten Folgendes einschließen:

effects.core.js
effects.highlight.js

Sergio del Amo
quelle
Highlight Quelle ist hier: github.com/jquery/jquery-ui/blob/master/ui/…
styfle

Antworten:

98

Diese Funktion ist Teil von jQuery effects.core.js :

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

Wie Steerpike in den Kommentaren hervorhob, müssen effects.core.js und effects.highlight.js enthalten sein, um dies nutzen zu können.

Baldu
quelle
1
Ich habe die Demo auf der jquery-Site docs.jquery.com/UI/Effects/Highlight#overview gesehen. Ich habe es in meinem Code versucht, mache aber nichts. Muss ich extra herunterladen? Es heißt Abhängigkeiten: Effects Core. Es ist dies ein weiteres Plugin.
Sergio del Amo
Richtige Antwort, aber ich erwähne nur, dass es sich um eine integrierte Funktion für die jQuery-Effekte.core.js handelt, nicht für die jQuery-Kerndatei als animate (). Ich dachte nur, es lohnt sich zu klären.
Steerpike
5
Heh, wie Sergio so offensichtlich gerade entdeckt hat ... ja Sergio, Sie müssen die Datei effects.core.js und effects.highlight.js einschließen (überprüfen Sie die Quelle hier: docs.jquery.com/UI/Effects/Highlight )
Steerpike
2
Dies ist in der jQuery-Benutzeroberfläche verfügbar: docs.jquery.com/UI/Effects/Highlight#overview
Matt Scilipoti
7
Als Aktualisierung früherer Kommentare enthalten Sie nicht mehr effects.core.js und effects.highlight.js (und diese alten URLs funktionieren nicht mehr). Die neue Möglichkeit, dies einzuschließen, besteht darin, die jquery-ui-Bibliothek einzuschließen
Sean Colombo
66

Ich habe die Antwort von Sterling Nichols geliebt, da sie leicht war und kein Plugin benötigte. Ich habe jedoch festgestellt, dass es mit schwebenden Elementen nicht funktioniert (z. B. wenn das Element "float: right" ist). Also habe ich den Code neu geschrieben, um die Hervorhebung richtig anzuzeigen, unabhängig davon, wie das Element auf der Seite positioniert ist:

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(); });
    });
}

Optional:
Verwenden Sie den folgenden Code, wenn Sie auch den Randradius des Elements anpassen möchten:

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(); });
    });
}
Doug S.
quelle
9
Ich liebe diese Lösung. Funktioniert hervorragend in Tabellenzeilen.
Perry Tew
Beste Lösung bisher. Wenn es auch den Randradius des Elements kopieren würde, wäre es immer besser.
Stijn Van Bael
@StijnVanBael Code jetzt aktualisiert, um den Randradius zu kopieren. Vielen Dank für den Vorschlag.
Doug S
Das ist großartig, ich brauche jetzt keine UI-Bibliothek, aber mein Problem ist, dass es nicht mein gesamtes Div bei der ersten Verwendung hervorhebt, wahrscheinlich weil ein Teil davon leer ist und Text gesetzt wird, kurz bevor dies aufgerufen wird?
NaughtySquid
Schön, aber das scheint bei Modalitäten wie FeatherlightJs nicht zu funktionieren.
Ryan
64

Die jQuery-Effektbibliothek fügt Ihrer App einen unnötigen Overhead hinzu. Sie können dasselbe nur mit jQuery erreichen. 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();
Sterling Nichols
quelle
4
Danke, das ist besser und ich habe nach etwas gesucht, mit dem ich vermeiden kann, einen vollständigen UI-Kern einzubeziehen, was völlig unnötig war.
DJ
Du rockst. Genau das, wonach ich gesucht habe, ohne ein weiteres Plugin hinzuzufügen. Und ich mag es, dass es eine tatsächliche Überlagerung des gesamten Elements macht, anstatt nur die Hintergrundfarbe des Elements zu ändern (die durch Text, Schaltflächen usw. verdeckt werden könnte).
Doug S
3
UPDATE: Dieser Code schlägt häufig fehl, wenn versucht wird, schwebende Elemente hervorzuheben (dh wenn das Element "float: right" ist). Also habe ich den Code neu geschrieben, um das Highlight richtig anzuzeigen, egal wie das Element auf der Seite positioniert ist
Doug S
Danke für das Update Doug .. Ich muss meine eigenen Bibliotheken aktualisieren.
Sterling Nichols
2
Schöne leichte Lösung - funktioniert wirklich gut. Ich habe festgestellt, dass meine Hervorhebungen nicht das Auffüllen von Elementen enthalten, daher habe ich alle meine Formularfelder verwendet .width(el.outerWidth())und .height(el.outerHeight())hervorgehoben.
Mark B
13

Definieren Sie Ihr CSS wie folgt:

@-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;
}

Fügen Sie die Klasse einfach yftzu einem beliebigen Element hinzu$('.some-item').addClass('yft')

Demo: http://jsfiddle.net/Q8KVC/528/

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

Sollte den Trick machen. Stellen Sie es auf Gelb und verblassen Sie es dann auf Weiß


quelle
Danke für die Antwort. Es funktioniert aber nicht. Es scheint, dass animiert nichts tut.
Sergio del Amo
Welche Version von jQuery verwenden Sie?
1.3.2. Ich habe dies zu meiner Frage hinzugefügt
Sergio del Amo
Dies funktionierte gut für meine Zwecke ohne Abhängigkeiten über die Vanille-Abfrage hinaus.
Gojomo
3
Dies erfordert das Plugin jQuery.Color (), um zu funktionieren: github.com/jquery/jquery-color
Dia Kharrat
7

Ich habe gerade ein ähnliches Problem bei einem Projekt gelöst, an dem ich gearbeitet habe. Standardmäßig kann die Animationsfunktion keine Farben animieren. Versuchen Sie, jQuery-Farbanimationen einzuschließen .

Alle Antworten hier verwenden dieses Plugin, aber niemand erwähnt es.

Travis
quelle
3

Eigentlich habe ich eine Lösung, die nur jQuery 1.3x und kein zusätzliches Plugin benötigt.

Fügen Sie Ihrem Skript zunächst die folgenden Funktionen hinzu

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)
}

Rufen Sie als nächstes die Funktion folgendermaßen auf:

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

Ich lasse Sie die Parameter erraten, sie sind ziemlich selbsterklärend. Um ehrlich zu sein, ist das Skript nicht von mir, ich habe es auf eine Seite genommen und dann geändert, damit es mit der neuesten jQuery funktioniert.

NB: getestet auf Firefox 3 und dh 6 (ja, es funktioniert auch auf diesem alten Ding)


quelle
2
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');
              });
}

Die Zeile this.style.removeAttribute('filter')ist für einen Anti-Aliasing-Fehler im IE.

Rufen Sie jetzt von überall YellowFade an und übergeben Sie Ihre Auswahl

YellowFade('#myDivId');

Bildnachweis : Phil Haack hatte eine Demo, die genau zeigte, wie das geht. Er machte eine Demo zu JQuery und ASPNet MVC.

Schauen Sie sich dieses Video an

Update : Hast du dir das Video angesehen? Um dies zu erwähnen, ist das JQuery.Color-Plugin erforderlich

Vin
quelle
Der nächste Fehler wird von der Filterleitung ausgelöst. Ich verwende Yellow Fade in einem Tabellenzeilenelement (tr). "This.style.removeAttribute ist keine Funktion [Bei diesem Fehler brechen] this.style.removeAttribute ('filter');"
Sergio del Amo
2

Ich hasste es, 23 KB hinzuzufügen, nur um effects.core.js und effects.highlight.js hinzuzufügen, also schrieb ich Folgendes. Es emuliert das Verhalten, indem es fadeIn (das Teil von jQuery selbst ist) verwendet, um das Element zu "flashen":

$.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); 
        });
    });
}

Rufen Sie es dann mit $ ('. item') auf. faderEffect ();

Corey
quelle
Dies ist nicht dasselbe wie die gelbe Überblendung, die der Benutzer benötigt.
Jon Winstanley
2
Richtig. Ich schlage eine Alternative oder "etwas Ähnliches" vor.
Corey
2

Das ist meine Lösung für das Problem. es funktioniert hervorragend. Es besteht die jslint-Fehlerüberprüfung und funktioniert auch in IE8 und IE9 einwandfrei. Natürlich können Sie es optimieren, um Farbcodes und Rückrufe zu akzeptieren:

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});
};
viele
quelle
1
Welchen Nutzen hat dies gegenüber dem jQuery-Highlight? docs.jquery.com/UI/Effects/Highlight
Nathan Koop
1
Nun, in meinem Fall konnte ich Jquery UI nicht verwenden. Also musste ich nur mit Jquery eine Lösung finden.
viele
1

Dies ist eine Nicht-jQuery-Option, die Sie für den Farbüberblendungseffekt verwenden können. Im Array "Farben" fügen Sie die Übergangsfarben hinzu, die Sie von der Anfangsfarbe bis zur letzten Farbe benötigen. Sie können so viele Farben hinzufügen, wie Sie möchten.

   <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> 
Jefrey Bulla
quelle
0

Wenn Sie eine alternative Yellow-Fade-Technik ausprobieren möchten, die nicht vom Effekt der jQuery-Benutzeroberfläche abhängt, können Sie ein gelbes Div (oder eine andere Farbe) hinter Ihrem Inhalt positionieren und jQuery .fadeOut () verwenden.

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>
tfmontague
quelle
0

Ich habe einfach benutzt ...

<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>
BENN1TH
quelle
0

Ein einfaches / rohes Skript für ein "gelbes Ausblenden", keine Plugins außer jquery selbst . Setzen Sie einfach den Hintergrund mit RGB (255.255, Hervorhebungsfarbe) in einem Timer:

<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>
Johan Danforth
quelle