JQueryによる黄色のフェード効果


100

37SignalsのYellow Fadeエフェクトに似たものを実装したいと思います。

私はjquery 1.3.2を使用しています

コード

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

次の呼び出しは、ボックス IDを使用してDOM要素を黄色でフェード表示します

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

しかし、それだけで黄色になります。15000ミリ秒後、白い背景はありません。

なぜそれが機能しないのですか?

解決

以下を使用できます。

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

ただし、以下を含める必要があります。

effects.core.js
effects.highlight.js


ハイライト源はここにある:github.com/jquery/jquery-ui/blob/master/ui/...
styfle

回答:


98

この関数は、jQueryのの一部ですeffects.core.js

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

Steerpikeがコメントで指摘したように、これを使用するには、effects.core.jseffects.highlight.jsを含める必要があります。


1
jqueryサイトdocs.jquery.com/UI/Effects/Highlight#overviewでデモを見ました 。コードで試しましたが、何もしません。追加でダウンロードする必要がありますか?それは依存関係を言います:効果コア。これは別のプラグインです。
セルジオデルアモ

正解ですが、これはjQuery Effects.core.jsへの組み込み関数であり、animate()としてのコアjQueryファイルではありません。明確にする価値があると思いました。
Steerpike、2009年

5
えっと、Sergioが明らかに発見したばかりなので...はいSergio、effects.core.jsファイルとEffects.highlight.jsを含める必要があります(ソースをここで確認してください:docs.jquery.com/UI/Effects/Highlight
Steerpike、2009年

2
これはjQuery UIで利用可能です:docs.jquery.com/UI/Effects/Highlight#overview
Matt Scilipoti

7
以前のコメントの更新として、effects.core.jsとeffects.highlight.js(およびこれらの古いURLはもはや機能しなくなりました)を含めなくなりました。これを含める新しい方法は、jquery-uiライブラリを含めることです:code.jquery.com/ui/1.10.4/jquery-ui.min.js
Sean Colombo

66

Sterling Nicholsの回答は、軽量でプラグインを必要としないため、とても気に入りました。ただし、浮動要素では機能しないことがわかりました(要素が「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(); });
    });
}

オプション:
要素のborder-radiusも一致させる場合は、次のコードを使用します。

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
このソリューションが大好きです。テーブルの行に最適です。
Perry Tew

これまでのところ最良の解決策。要素の境界線の半径もコピーする場合は、さらに優れています。
Stijn Van Bael

@StijnVanBaelコードは、border-radiusをコピーするように更新されました。提案ありがとうございます。
Doug S

これは素晴らしく、今はUI libは必要ありませんが、私の問題は、最初の使用時にdiv全体が強調表示されないことです。おそらく、その一部が空で、これが呼び出される直前にテキストが設定されているためでしょうか。
NaughtySquid 2016年

いいですが、これはFeatherlightJsのようなモーダルでは機能しないようです。
ライアン

64

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

4
おかげで、これはより良いと私は完全に不要な完全なUIコアを含めることを避けることができるものを探していました。
deej 2012

あなたはロックします。別のプラグインを追加することなく、まさに私が探していたもの。要素の背景色を変更するだけではなく、要素全体を実際にオーバーレイするのが好きです(テキストやボタンなどで覆われている可能性があります)。
Doug S

3
更新:このコードは、フローティング要素を強調表示しようとすると(つまり、要素が「float:right」の場合)失敗することがよくあります。適切要素がページ上に配置されているかに関係なくハイライトを表示するコードを書いた再私はそう:stackoverflow.com/a/13106698/1145177
ダグS

アップデートダグをありがとう..私は自分のライブラリを更新する必要があります。
スターリングニコルズ

2
素敵な軽量ソリューション-本当にうまくいきます。ただし、ハイライトに要素のパディングが含まれていないことがわかったので、を使用.width(el.outerWidth()).height(el.outerHeight())て、フォームフィールド全体をハイライト表示しました。
マークB

13

次のように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/


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

トリックを行う必要があります。黄色に設定してから、白にフェードします


答えてくれてありがとう。それは機能していません。animateは何もしないようです。
セルジオデルアモ

どのバージョンのjQueryを使用していますか?

1.3.2。私はこれを私の質問に追加しました
セルジオデルアモ

これは私の目的にはうまくいき、バニラjquery以外の依存関係はありませんでした。
gojomo

3
これを機能させるにはjQuery.Color()プラグインが必要です:github.com/jquery/jquery-color
Dia Kharrat

7

私が取り組んでいるプロジェクトでこれに似た問題を解決しました。デフォルトでは、関数animateは色をアニメーション化できません。jQuery Color Animationsを含めてみてください。

ここでのすべての回答はこのプラグインを使用していますが、誰も言及していません。


3

実際、私はjQuery 1.3xのみを必要とし、追加のプラグインを必要としないソリューションを持っています。

まず、次の関数をスクリプトに追加します

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

パラメータを推測させてください。これらは自明です。正直に言うと、スクリプトは私からのものではないので、私はそれをページに取り、それを変更して、最新のjQueryで動作するようにしました。

注意:Firefox 3とIE 6でテストされています(そう、古いものでも動作します)


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

この行this.style.removeAttribute('filter')は、IEのアンチエイリアスバグに関するものです。

今、どこからでもYellowFadeを呼び出して、セレクターを渡します

YellowFade('#myDivId');

クレジット:Phil Haackは、これを行う方法を正確に示すデモを行いました。彼はJQueryとASPNet MVCのデモを行っていました。

このビデオを見てください

更新:ビデオをご覧になりましたか?これについて言及するのを忘れたため、JQuery.Colorプラグインが必要です


次のエラーはフィルターラインによってスローされています。テーブルの行要素(tr)で黄色のフェードを使用しています。「this.style.removeAttributeは関数ではありません。
セルジオデルアモ

2

Effects.core.jsとEffects.highlight.jsを追加するためだけに23kbを追加するのは嫌なので、次のように書きました。要素を「フラッシュ」するためにfadeIn(jQuery自体の一部)を使用して動作をエミュレートします。

$.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();で呼び出します


これは、ユーザーが必要とした黄色のフェードとは異なります。
Jon Winstanley、2010年

2
正しい。私は代替案または「類似の何か」を提案しています。
コーリー

2

これが私の問題の解決策です。それは優れた働きをします。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});
};

1
これはjQueryのハイライトに対してどのような利点がありますか?docs.jquery.com/UI/Effects/Highlight
Nathan Koop、

1
私の場合は、jquery uiを使用できませんでした。だから私はJqueryだけで解決策を修正することになりました。
多くの

1

これは、jQuery以外のオプションで、色あせ効果に使用できます。「色」の配列では、最初の色から最後の色まで必要な遷移色を追加します。好きなだけ色を追加できます。

   <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

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>

0

私は単に使用しました...

<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

「黄色のフェードアウト」のための単純な/生のスクリプト。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>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.