Yellow fade effect with JQuery

前端 未结 15 1716
萌比男神i
萌比男神i 2020-11-29 16:23

I would like to implement something similar to 37Signals\'s Yellow Fade effect.

I am using Jquery 1.3.2

The code

(function($) {
   $.fn.yell         


        
相关标签:
15条回答
  • 2020-11-29 16:46

    Actually, I have a solution that only needs jQuery 1.3x, and no aditionnal plugin.

    First, add the following functions to your 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)
    }
    

    Next, call the function using this:

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

    I'll let you guess the parameters, they are pretty self explanatory. To be honest the script is not from me, I took it on a page then changed it so it works with the latest jQuery.

    NB: tested on firefox 3 and ie 6 (yes it works on that old thing too)

    0 讨论(0)
  • 2020-11-29 16:48

    I loved Sterling Nichols answer, since it was lightweight and didn't require a plugin. However, I discovered it didn't work with floating elements (i.e. such as when the element is "float:right"). So I re-wrote the code to display the highlight properly no matter how the element is positioned on the page:

    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:
    Use the following code if you also want to match the border-radius of the element:

    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(); });
        });
    }
    
    0 讨论(0)
  • 2020-11-29 16:48

    I simply used...

    <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 讨论(0)
  • 2020-11-29 16:49
    (function($) {
      $.fn.yellowFade = function() {
        this.animate( { backgroundColor: "#ffffcc" }, 1 ).animate( { backgroundColor: "#ffffff" }, 1500 );
      }
    })(jQuery);
    

    Should do the trick. Set it to the yellow, then fade it to white

    0 讨论(0)
  • 2020-11-29 16:49

    this is my solution for the problem. it works excelent. it passes jslint error validation and also works decent in IE8 and IE9. Of course you can tweak it to accept color codes and callbacks:

    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});
    };
    
    0 讨论(0)
  • 2020-11-29 16:52
    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');
                  });
    }
    

    The line this.style.removeAttribute('filter') is for an anti-aliasing bug in IE.

    Now, call YellowFade from wherever, and pass your selector

    YellowFade('#myDivId');
    

    Credit: Phil Haack had a demo showing exactly how to do this. He was doing a demo on JQuery and ASPNet MVC.

    Take a look at this video

    Update: Did you take a look at the video? Forgot to mention this requires the JQuery.Color plugin

    0 讨论(0)
提交回复
热议问题