Efekt blaknięcia żółtego z JQuery


100

Chciałbym zaimplementować coś podobnego do efektu Yellow Fade w 37Signals.

Używam Jquery 1.3.2

Kod

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

a następne wywołanie pokaże żółty zanik elementu DOM z identyfikatorem pola .

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

Ale to tylko sprawia, że ​​jest żółty. Brak białego tła po 15000 milisekundach.

Masz jakiś pomysł, dlaczego to nie działa?

Rozwiązanie

Możesz użyć:

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

Ale musisz dołączyć:

effects.core.js
effects.highlight.js


Źródło podświetlenia jest tutaj: github.com/jquery/jquery-ui/blob/master/ui/…
— styfle

Odpowiedzi:


98

Ta funkcja jest częścią jQuery effects.core.js :

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

Jak zauważył Steerpike w komentarzach, żeby z tego skorzystać, należy uwzględnić efekty.core.js i effects.highlight.js .


1
Widziałem demo w witrynie jquery docs.jquery.com/UI/Effects/Highlight#overview Próbowałem w moim kodzie, ale nic nie robiłem . Czy muszę pobierać dodatkowe pliki. Mówi o zależnościach: rdzeń efektów. To jest kolejna wtyczka.
— Sergio del Amo

Prawidłowa odpowiedź, ale wspomnę tylko, że jest to funkcja wbudowana w jQuery effects.core.js, a nie do podstawowego pliku jQuery jako animate (). Pomyślałem, że warto to wyjaśnić.
— Steerpike

5
Heh, jak Sergio właśnie odkrył ... tak Sergio, musisz dołączyć plik effects.core.js i effects.highlight.js (sprawdź źródło tutaj: docs.jquery.com/UI/Effects/Highlight )
— Steerpike

2
Jest to dostępne w interfejsie użytkownika jQuery: docs.jquery.com/UI/Effects/Highlight#overview
— Matt Scilipoti,

7
W ramach aktualizacji poprzednich komentarzy nie dodajesz już efektów effects.core.js i effects.highlight.js (a te stare adresy URL już nie działają). Nowym sposobem na uwzględnienie tego jest dołączenie biblioteki jquery-ui: code.jquery.com/ui/1.10.4/jquery-ui.min.js
— Sean Colombo,

66

Uwielbiałem odpowiedź Sterling Nichols, ponieważ była lekka i nie wymagała wtyczki. Jednak odkryłem, że nie działa z elementami pływającymi (np. Gdy element jest „float: right”). Dlatego ponownie napisałem kod, aby poprawnie wyświetlać wyróżnienie bez względu na to, jak element jest umieszczony na stronie:

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

Opcjonalnie:
użyj poniższego kodu, jeśli chcesz również dopasować border-radius elementu:

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

9
Uwielbiam to rozwiązanie. Świetnie sprawdza się w wierszach tabeli.
— Perry Tew

Jak dotąd najlepsze rozwiązanie. Gdyby skopiował również promień obramowania elementu, byłby jeszcze lepszy.
— Stijn Van Bael

Kod @StijnVanBael został teraz zaktualizowany, aby kopiować border-radius. Dziękuję za sugestię.
— Doug S

To jest niesamowite, nie potrzebuję teraz biblioteki UI, ale moim problemem jest to, że nie podświetli całego mojego div przy pierwszym użyciu, prawdopodobnie dlatego, że jego część jest pusta, a tekst jest ustawiony tuż przed wywołaniem tego?
— NaughtySquid

Fajnie, ale wygląda na to, że nie działa na modach, takich jak FeatherlightJs.
— Ryan

64

Biblioteka efektów jQuery dodaje trochę niepotrzebnych kosztów do Twojej aplikacji. Możesz osiągnąć to samo tylko z 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();

4
Dzięki, to jest lepsze i szukałem czegoś, dzięki czemu mogę uniknąć włączenia pełnego rdzenia interfejsu użytkownika, który był całkowicie niepotrzebny.
— deej

Rządzisz. Dokładnie to, czego szukałem, bez dodawania kolejnej wtyczki. I podoba mi się, że robi faktyczną nakładkę całego elementu, w przeciwieństwie do zwykłej zmiany koloru tła elementu (który może być zakryty tekstem, przyciskami itp.).
— Doug S,

3
AKTUALIZACJA: Ten kod często kończy się niepowodzeniem przy próbie podświetlenia elementów pływających (tj. Gdy element ma wartość „float: right”). Dlatego ponownie napisałem kod, aby poprawnie wyświetlać wyróżnienie bez względu na to, jak element jest umieszczony na stronie: stackoverflow.com/a/13106698/1145177
— Doug S

Dzięki za aktualizację Doug… Będę musiał zaktualizować moje własne biblioteki.
— Sterling Nichols

2
Ładne, lekkie rozwiązanie - działa naprawdę dobrze. Zauważyłem, że moje wyróżnienia nie zawierały wypełnienia elementów, więc użyłem .width(el.outerWidth())i .height(el.outerHeight())do wyróżnienia wszystkich pól formularza.
— Mark B,

13

Zdefiniuj swój CSS w następujący sposób:

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

I po prostu dodaj klasę yftdo dowolnego elementu$('.some-item').addClass('yft')

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


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

Powinien załatwić sprawę. Ustaw go na żółty, a następnie zmień go na biały


Dziękuję za odpowiedź. To jednak nie działa. Wygląda na to, że animacja nic nie robi.
— Sergio del Amo

jakiej wersji jQuery używasz?

1.3.2. Dodałem to do mojego pytania
— Sergio del Amo

To działało dobrze dla moich celów bez żadnych zależności poza waniliowym jquery.
— gojomo

3
Do działania potrzebna jest wtyczka jQuery.Color (): github.com/jquery/jquery-color
— Dia Kharrat Kwietnia

7

Właśnie rozwiązałem problem podobny do tego w projekcie, nad którym pracowałem. Domyślnie funkcja animacji nie może animować kolorów. Spróbuj dołączyć animacje kolorów jQuery .

Wszystkie odpowiedzi tutaj używają tej wtyczki, ale nikt o niej nie wspomina.


3

Właściwie mam rozwiązanie, które wymaga tylko jQuery 1.3x i żadnej dodatkowej wtyczki.

Najpierw dodaj do skryptu następujące funkcje

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

Następnie wywołaj funkcję za pomocą tego:

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

Pozwolę ci odgadnąć parametry, są one dość oczywiste. Szczerze mówiąc, skrypt nie jest ode mnie, wziąłem go na stronę, a następnie zmieniłem, aby działał z najnowszym jQuery.

Uwaga: testowane na Firefoksie 3 i tj. 6 (tak, działa też na tej starej rzeczy)


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

Linia this.style.removeAttribute('filter')dotyczy błędu wygładzania krawędzi w IE.

Teraz zadzwoń do YellowFade z dowolnego miejsca i przekaż swój selektor

YellowFade('#myDivId');

Kredyt : Phil Haack miał demo pokazujące dokładnie, jak to zrobić. Robił demo na JQuery i ASPNet MVC.

Spójrz na ten film

Aktualizacja : czy obejrzałeś wideo? Zapomniałem wspomnieć, że wymaga to wtyczki JQuery.Color


Kolejny błąd jest generowany przez linię filtra. Używam żółtego zanikania w elemencie wiersza tabeli (tr) "this.style.removeAttribute nie jest funkcją [Przerwa w tym błędzie] this.style.removeAttribute ('filter');"
— Sergio del Amo

2

Nienawidziłem dodawania 23kb tylko po to, aby dodać efekty.core.js i effects.highlight.js, więc napisałem co następuje. Emuluje to zachowanie, używając fadeIn (który jest częścią samego jQuery) do „flashowania” elementu:

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

następnie wywołaj go za pomocą $ ('. item'). faderEffect ();


To nie to samo, co żółte zanikanie, którego wymagał użytkownik.
— Jon Winstanley,

2
Dobrze. Proponuję alternatywę lub „coś podobnego”.
— Corey

2

to jest moje rozwiązanie problemu. działa doskonale. przechodzi walidację błędów jslint, a także działa przyzwoicie w IE8 i IE9. Oczywiście możesz go dostosować, aby akceptował kody kolorów i wywołania zwrotne:

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

1
jakie ma to zalety w porównaniu z wyróżnieniem jQuery? docs.jquery.com/UI/Effects/Highlight
— Nathan Koop

1
cóż, w moim przypadku nie mogłem użyć interfejsu użytkownika Jquery. więc zostałem z naprawieniem rozwiązania za pomocą tylko Jquery.
— wiele

1

Jest to opcja inna niż jQuery, której można użyć w celu uzyskania efektu zanikania kolorów. W tablicy „colors” dodajesz potrzebne kolory przejścia od koloru początkowego do ostatniego. Możesz dodać tyle kolorów, ile chcesz.

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

0

Jeśli chcesz wypróbować alternatywną technikę żółtego zanikania, która nie zależy od efektu interfejsu użytkownika jQuery, możesz umieścić żółty (lub inny kolor) element div za treścią i użyć 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>

0

Po prostu użyłem ...

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

0

Prosty / surowy skrypt dla "żółtego zanikania", bez wtyczek z wyjątkiem samego jquery . Po prostu ustawiam tło za pomocą rgb (255,255, highlightcolor) w zegarze:

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

0

POTRZEBUJESZ TYLKO HTML DO TO ZROBIENIA. Nie jest wymagany CSS ani JS!

Załóżmy, że na określonej stronie znajduje się tekst, który chcesz tymczasowo „podświetlić i pokazać” użytkownikom odwiedzającym stronę.

I niech treść na tej stronie będzie podświetlona jako tag h2 i zawartość tagu ap, jak pokazano poniżej:


<h2>Carbon Steel for Blacksmithing</h2>

<p>The vast majority of blacksmithing uses low and medium carbon steels. High carbon steel, sometimes called “carbon tool steel,” is very hard, and difficult to bend or weld; it gets very brittle once it’s been heat-treated.</p>
<p>You can buy steel, or you can find and recycle. I prefer the later.</p>

Podane poniżej: łącze, które RZECZYWISTE podświetli treść pokazaną powyżej. Za każdym razem, gdy użytkownik kliknie ten link ... zostaje przekierowany na stronę w to samo miejsce, w którym znajduje się treść, a także tekst jest podświetlony!

https://stackoverflow.com/questions/848797/yellow-fade-effect-with-jquery/63571443#:~:text=Carbon%20Steel%20for%20Blacksmithing,you%20can%20find%20and%20recycle.

Aby dać przykład na żywo: kliknij link podany powyżej, aby zobaczyć efekt podświetlenia treści, o którym wspomniałem w linku.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.