Ефект жовтого в’янення за допомогою JQuery


100

Я хотів би реалізувати щось подібне до ефекту Yellow Fade 37Signals.

Я використовую Jquery 1.3.2

Код

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

а наступний показ дзвінка жовтий зникає в ефірі DOM з ідентифікатором поля .

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

Але це лише робить його жовтим. Немає білого тла через 15000 мілісекунд.

Будь-яка ідея, чому це не працює?

Рішення

Ви можете використовувати:

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

Але вам потрібно буде включити:

effects.core.js
effects.highlight.js


Відповіді:


98

Ця функція є частиною jQuery effects.core.js :

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

Як Стірпайк зазначив в коментарі, effects.core.js і effects.highlight.js повинні бути включені для того , щоб використовувати це.


1
Демонстрацію я побачив на сайті jquery docs.jquery.com/UI/Effects/Highlight#overview Я спробував у своєму коді, але нічого не робить. Чи потрібно мені завантажувати зайві Він говорить про залежності: Effects Core. Це ще один плагін.
Серхіо дель Амо

Правильна відповідь, але я лише зазначу, що це вбудована функція до jQuery effects.core.js, а не до основного файлу jQuery як animate (). Просто думав, що варто уточнити.
Steerpike

5
Так, як Сергіо так очевидно щойно виявив ... так, Серхіо, вам потрібно включити файл Effects.core.js та ефекти.highlight.js (перевірте джерело тут: docs.jquery.com/UI/Effects/Highlight )
Steerpike

2
Це доступно в інтерфейсі jQuery: 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
Шон Коломбо

66

Я любив відповідь Стерлінга Нікольса, оскільки він був легкий і не потребував плагіна. Однак я виявив, що це не працює з плаваючими елементами (тобто, наприклад, коли елемент "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

Найкраще рішення поки що. Якщо він також скопіював би радіус кордону елемента, це було б завжди краще.
Штійн Ван Баел

Код @StijnVanBael тепер оновлений для копіювання радіусу межі. Дякую за пропозицію.
Doug S

Це приголомшливо, для мене тепер немає необхідності в користувальницькому інтерфейсі, але моє питання полягає в тому, що вона не виділить весь мій 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
Дякую, це краще, і я шукав те, з чим я можу уникнути, включаючи повне ядро ​​інтерфейсу, яке було зовсім непотрібним.
deej

Ти рок. Саме те, що я шукав, не додаючи іншого плагіна. І мені подобається, що це фактичне накладання всього елемента, на відміну від просто зміни кольору фону елемента (який може бути прикритий текстом, кнопками тощо).
Doug S

3
ОНОВЛЕННЯ: Цей код часто не вдається при спробі виділити плаваючі елементи (тобто, коли елемент "float: right"). Тому я переписав код, щоб правильно відобразити підсвітку незалежно від того, як елемент розміщений на сторінці: stackoverflow.com/a/13106698/1145177
Doug S

Дякую за оновлення Дуг. Мені доведеться оновити власні бібліотеки.
Стерлінг Ніколс

2
Приємне легке рішення - працює дуже добре. Я виявив, що мої основні моменти не включають прокладку елементів, тому я використовував .width(el.outerWidth())і .height(el.outerHeight())для виділення цілого поля моєї форми.
Марк Б

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

Слід зробити трюк. Встановіть його на жовте, а потім вицвіть на білий


Дякую за відповідь. Хоча це не працює. Здається, анімація нічого не робить.
Серхіо дель Амо

яку версію jQuery ви використовуєте?

1.3.2. Я додав це до свого питання
Серхіо дель Амо

Це добре працювало для моїх цілей, не залежаючи від ванільного джикері.
gojomo

3
Для цього потрібен плагін jQuery.Color (), щоб працювати: github.com/jquery/jquery-color
Dia Kharrat

7

Я просто вирішив подібну проблему на проекті, над яким працював. За замовчуванням функція анімації не може анімувати кольори. Спробуйте включити кольорові анімації jQuery .

У всіх відповідях тут використовується цей плагін, але його ніхто не згадує.


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 і т. Д. 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');

Кредит : Філ Хаак демонстрував, як саме це зробити. Він робив демонстрацію на JQuery та ASPNet MVC.

Погляньте на це відео

Оновлення : Ви подивилися відео? Забув згадати про це, потрібен плагін JQuery.Color


Наступну помилку видає лінія фільтра. Я використовую жовте відцвітання в елементі рядка таблиці (tr) "this.style.removeAttribute не є функцією [Перерва на цю помилку] this.style.removeAttribute ('filter');"
Серхіо дель Амо

2

Я ненавидів додавати 23 кбіт просто для додавання Effects.core.js і effects.highlight.js, тому я написав наступне. Він імітує поведінку, використовуючи 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 ();


Це не те саме, що жовте в’янення, яке вимагає користувач.
Джон Вінстанлі

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
Натан Кооп

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, ви можете розташувати жовтий (або інший колір) поділ за своїм вмістом і використовувати 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, підсвітка кольорів) у таймері:

<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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.