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


답변:


98

이 함수는 jQuery effects.core.js의 일부입니다 .

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

Steerpike가 주석에서 지적했듯이이 기능 을 사용하려면 effects.core.jseffects.highlight.js 가 포함되어야합니다.


1
jquery 사이트 docs.jquery.com/UI/Effects/Highlight#overview 에서 데모를 보았습니다. 코드에서 시도했지만 아무것도하지 않습니다. 추가 다운로드가 필요합니까? 종속성 : Effects Core. 이것은 또 다른 플러그인입니다.
Sergio del Amo

정답이지만 animate ()와 같은 핵심 jQuery 파일이 아니라 jQuery effects.core.js에 내장 된 함수라고 언급하겠습니다. 명확히 할 가치가 있다고 생각했습니다.
Steerpike

5
Heh, Sergio가 방금 발견했듯이 ... 예 Sergio, effects.core.js 파일과 effects.highlight.js를 포함해야합니다 (여기에서 소스 확인 : docs.jquery.com/UI/Effects/Highlight ).
Steerpike

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

선택 사항 :
요소의 테두리 반경도 일치 시키려면 다음 코드를 사용하세요.

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

@StijnVanBael 코드가 이제 border-radius를 복사하도록 업데이트되었습니다. 제안 해 주셔서 감사합니다.
Doug S

이것은 굉장하고 UI 라이브러리가 필요하지 않지만 내 문제는 처음 사용할 때 전체 div를 강조 표시하지 않는다는 것입니다.
NaughtySquid

좋지만 이것은 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

당신은 흔들립니다. 다른 플러그인을 추가하지 않고 정확히 내가 찾고 있던 것. 그리고 요소 배경색 (텍스트, 버튼 등으로 가려 질 수 있음)을 변경하는 것과는 반대로 전체 요소의 실제 오버레이를 수행하는 것이 좋습니다.
Doug S

3
업데이트 :이 코드는 부동 요소를 강조 표시하려고 할 때 종종 실패합니다 (예 : 요소가 "float : right"인 경우). 그래서 요소가 페이지에 어떻게 배치 되든 상관없이 하이라이트를 올바르게 표시하도록 코드를 다시 작성했습니다. stackoverflow.com/a/13106698/1145177
Doug S

업데이트 해 주셔서 감사합니다. Doug .. 내 라이브러리를 업데이트해야합니다.
Sterling Nichols

2
멋진 경량 솔루션-정말 잘 작동합니다. 나는 내가 사용 그래서 내 하이라이트, 비록 요소 패딩을 포함하지 않았다 발견 .width(el.outerWidth())하고 .height(el.outerHeight())내 양식 필드의 전체를 강조 표시합니다.
Mark 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);

트릭을해야합니다. 노란색으로 설정 한 다음 흰색으로 페이드


답변 해주셔서 감사합니다. 그래도 작동하지 않습니다. 애니메이트가 아무것도하지 않는 것 같습니다.
Sergio del Amo

어떤 버전의 jQuery를 사용하고 있습니까?

1.3.2. 나는 이것을 내 질문에 추가했습니다
Sergio del Amo

이것은 바닐라 jquery를 넘어서는 종속성없이 내 목적에 적합했습니다.
gojomo

3
이것은 jQuery.Color을 () 작업에 플러그인 필요 : github.com/jquery/jquery-color
디아 Kharrat

7

작업중인 프로젝트에서 이와 유사한 문제를 방금 해결했습니다. 기본적으로 애니메이션 기능은 색상에 애니메이션을 적용 할 수 없습니다. 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에서 작동하도록 변경했습니다.

주의 : 파이어 폭스 3 및 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는 함수가 아닙니다. [이 오류에서 중단] this.style.removeAttribute ( 'filter');"
Sergio del Amo

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

2
권리. 나는 대안 또는 "유사한 것"을 제안하고 있습니다.
Corey

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
나단 쿠프

1
제 경우에는 Jquery ui를 사용할 수 없었습니다. 그래서 Jquery로만 솔루션을 수정했습니다.
많은

1

색상 페이드 효과에 사용할 수있는 비 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> 

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.