Эффект затухания желтого цвета с помощью 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);

Но вам нужно будет включить:

эффекты.core.js
effects.highlight.js

Серхио дель Амо
источник
Источник выделения находится здесь: github.com/jquery/jquery-ui/blob/master/ui/…
styfle

Ответы:

98

Эта функция является частью jQuery effects.core.js :

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

Как отметил Стирпайк в комментариях, для этого необходимо включить эффекты effects.core.js и effects.highlight.js .

Балду
источник
1
Я видел демонстрацию на сайте jquery docs.jquery.com/UI/Effects/Highlight#overview. Я пробовал использовать свой код, но ничего не делает. Нужно ли мне скачивать лишнее. Он говорит зависимости: Ядро эффектов. Это еще один плагин.
Серхио дель Амо,
Правильный ответ, но я просто упомяну, что это встроенная функция для jQuery effects.core.js, а не для основного файла jQuery как animate (). Просто подумал, что стоит уточнить.
Стирпайк,
5
Хех, как, очевидно, только что обнаружил Серджио ... да, Серджио, вам нужно включить файл effects.core.js и effects.highlight.js (проверьте источник здесь: docs.jquery.com/UI/Effects/Highlight )
Стирпайк,
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
Мне нравится это решение. Отлично работает со строками таблицы.
Перри Тью
Лучшее решение на данный момент. Если бы он также скопировал радиус границы элемента, было бы еще лучше.
Stijn Van Bael
Код @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
Спасибо, это лучше, и я искал что-то, с чем я могу избежать включения полного ядра пользовательского интерфейса, которое было совершенно ненужным.
дией
Ты жжешь. Именно то, что я искал, без добавления дополнительных плагинов. И мне нравится, что он фактически накладывает весь элемент, а не просто меняет цвет фона элемента (который может быть скрыт текстом, кнопками и т. Д.).
Doug S
3
ОБНОВЛЕНИЕ: этот код часто дает сбой при попытке выделить плавающие элементы (т.е. когда элемент имеет значение «float: right»). Поэтому я переписал код для правильного отображения выделения независимо от того, как элемент расположен на странице: stackoverflow.com/a/13106698/1145177
Doug S
Спасибо за обновление, Дуг .. Придется обновить собственные библиотеки.
Стерлинг Николс,
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);

Должен сделать свое дело. Установите желтый цвет, а затем сделайте его белым.


источник
Спасибо за ответ. Но это не работает. Вроде одушевленный ничего не делает.
Серхио дель Амо,
какую версию jQuery вы используете?
1.3.2. Я добавил это к своему вопросу
Серхио дель Амо
Это хорошо сработало для моих целей без каких-либо зависимостей, кроме vanilla jquery.
gojomo 03
3
Для работы этого требуется плагин jQuery.Color (): github.com/jquery/jquery-color
Dia 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.

NB: протестировано на 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');

Кредит : у Фила Хаака была демонстрация, показывающая, как именно это сделать. Он делал демонстрацию на JQuery и ASPNet MVC.

Взгляните на это видео

Обновление : вы смотрели видео? Забыл упомянуть, что для этого требуется плагин JQuery.Color

Вин
источник
Следующую ошибку выдает строка фильтра. Я использую желтое затухание в элементе строки таблицы (tr) «this.style.removeAttribute не является функцией [Прервать эту ошибку] ​​this.style.removeAttribute ('filter');»
Серхио дель Амо,
2

Я ненавидел добавлять 23 КБ только для добавления эффектов.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, который вы можете использовать для эффекта затухания цвета. В массиве «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>
tfmontague
источник
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>
BENN1TH
источник
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>
Йохан Данфорт
источник
0

ДЛЯ ЭТОГО НУЖЕН ТОЛЬКО HTML. Никаких CSS или JS не требуется!

Предположим, у вас есть текст на определенной странице, который вы хотите временно «выделить и показать» пользователям при посещении страницы.

И пусть содержимое на этой странице будет выделено тегом h2 и содержимым тега ap, как показано ниже:


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

Указано ниже: ссылка, которая ДЕЙСТВИТЕЛЬНО выделит содержимое, показанное выше. Всякий раз, когда пользователь нажимает на эту ссылку ... он перенаправляется на страницу в то же место, где находится контент, а также выделяется текст!

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

Чтобы привести живой пример: перейдите по приведенной выше ссылке, чтобы увидеть эффект выделения на контент, который я упомянул в ссылке.

Ашутош Хандуала
источник