Je cherche un moyen de faire ce qui suit.
J'ajoute un <div>
à une page et un rappel ajax renvoie une valeur. Le <div>
est rempli avec les valeurs de l'appel ajax et le <div>
est ensuite ajouté au début d'un autre <div>
, qui agit comme une colonne de table.
J'aimerais attirer l'attention de l'utilisateur, lui montrer qu'il y a quelque chose de nouveau sur la page.
Je veux que le <div>
clignote, pas pour afficher/masquer, mais pour mettre en surbrillance/ne pas souligner pendant un certain temps, disons 5 secondes.
Je suis en train de regarder le plugin blink, mais autant que je sache, il ne montre/cache que sur un élément.
Btw, la solution doit être multi-navigateur, et oui, IE malheureusement inclus. Je vais probablement devoir bidouiller un peu pour que cela fonctionne dans IE, mais dans l’ensemble, cela doit fonctionner.
jQuery UI Highlight Effect est ce que vous recherchez.
$("div").click(function () {
$(this).effect("highlight", {}, 3000);
});
La documentation et la démo peuvent être trouvés ici
Modifier
Peut-être que l'effet Pulsate est plus approprié, voir ici
Edit # 2
Pour ajuster l'opacité, vous pouvez faire ceci:
$("div").click(function() {
// do fading 3 times
for(i=0;i<3;i++) {
$(this).fadeTo('slow', 0.5).fadeTo('slow', 1.0);
}
});
Donc, il ne sera pas inférieur à 50% d'opacité.
Jetez un coup d’œil à http://jqueryui.com/demos/effect/ . Il a un effet nommé pulsate qui fera exactement ce que vous voulez.
$("#trigger").change(function() {$("#div_you_want_to_blink").effect("pulsate");});
C'est un effet de clignotement personnalisé que j'ai créé, qui utilise setInterval
et fadeTo
HTML -
<div id="box">Box</div>
JS -
setInterval(function(){blink()}, 1000);
function blink() {
$("#box").fadeTo(100, 0.1).fadeTo(200, 1.0);
}
Aussi simple que cela devient.
Si vous n'utilisez pas déjà la bibliothèque Jquery UI et que vous souhaitez imiter l'effet, ce que vous pouvez faire est très simple.
$('#blinkElement').fadeIn(100).fadeOut(100).fadeIn(100).fadeOut(100);
vous pouvez également jouer avec les chiffres pour obtenir un numéro plus rapide ou plus adapté à votre design.
Cela peut également être une fonction globale jquery afin que vous puissiez utiliser le même effet sur le site. Notez également que si vous placez ce code dans une boucle for, vous pouvez générer 1 million d'impulsions. Par conséquent, vous n'êtes pas limité à la valeur par défaut 6 ni à la valeur par défaut.
EDIT: Ajouter ceci en tant que fonction globale jQuery
$.fn.Blink = function (interval = 100, iterate = 1) {
for (i = 1; i <= iterate; i++)
$(this).fadeOut(interval).fadeIn(interval);
}
Blink n'importe quel élément facilement de votre site en utilisant ce qui suit
$('#myElement').Blink(); // Will Blink once
$('#myElement').Blink(500); // Will Blink once, but slowly
$('#myElement').Blink(100, 50); // Will Blink 50 times once
Pour ceux qui ne souhaitent pas inclure l'ensemble de l'interface utilisateur de jQuery, vous pouvez utiliser jQuery.Pulse.js .
Pour avoir une animation en boucle d'opacité changeante, procédez comme suit:
$('#target').Pulse({opacity: 0.8}, {duration : 100, pulses : 5});
Il est léger (moins de 1 Ko) et vous permet de mettre en boucle tout type d'animation.
Comme je ne vois pas de solutions basées sur jQuery qui ne nécessitent pas de bibliothèques supplémentaires, voici une solution simple, un peu plus flexible que celles utilisant fadeIn/fadeOut.
$.fn.blink = function (count) {
var $this = $(this);
count = count - 1 || 0;
$this.animate({opacity: .25}, 100, function () {
$this.animate({opacity: 1}, 100, function () {
if (count > 0) {
$this.blink(count);
}
});
});
};
Utilisez-le comme ça
$('#element').blink(3); // 3 Times.
Vous voudrez peut-être examiner l'interface utilisateur de jQuery. Plus précisément, l’effet de surbrillance:
Je ne trouvais pas exactement ce que je cherchais, alors j'ai écrit quelque chose d'aussi basique que possible. La classe en surbrillance pourrait simplement être une couleur d'arrière-plan.
var blinking = false; // global scope
function start_blinking() {
blinking = true;
blink();
}
function stop_blinking() {
blinking = false;
}
function blink(x=0) {
$("#element").removeClass("highlighted"); // default to not highlighted to account for the extra iteration after stopping
if (blinking) {
if (x%2 == 0) $("#element").addClass("highlighted"); // highlight on even numbers of x
setTimeout(function(){blink(++x)},500); // increment x and recurse
}
}
Je pense que vous pourriez utiliser une réponse similaire que j'ai donnée. Vous pouvez le trouver ici ... https://stackoverflow.com/a/19083993/2063096
Remarque: cette solution n'utilise PAS l'interface utilisateur de jQuery. Il existe également un violon permettant de jouer à votre guise avant de l'implémenter dans votre code.
Si vous ne voulez pas de la surcharge de jQuery UI, j’ai récemment écrit une solution récursive en utilisant .animate()
. Vous pouvez personnaliser les délais et les couleurs selon vos besoins.
function doBlink(id, count) {
$(id).animate({ backgroundColor: "#fee3ea" }, {
duration: 100,
complete: function() {
// reset
$(id).delay(100).animate({ backgroundColor: "#ffffff" }, {
duration: 100,
complete: function() {
// maybe call next round
if(count > 1) {
doBlink(id, --count);
}
}
});
}
});
}
Bien sûr, vous aurez besoin du plugin couleur pour que backgroundColor
fonctionne avec .animate()
. https://github.com/jquery/jquery-color
Et pour fournir un peu de contexte, voici comment je l’appelais. Je devais faire défiler la page à mon div cible, puis le faire clignoter.
$(window).load(function(){
$('html,body').animate({
scrollTop: $(scrollToId).offset().top - 50
}, {
duration: 400,
complete: function() { doBlink(scrollToId, 5); }
});
});
il suffit de donner elem.fadeOut (10) .fadeIn (10);
J'utilise différentes couleurs prédéfinies comme ceci:
theme = {
whateverFlashColor: '#ffffaa',
whateverElseFlashColor: '#bbffaa',
whateverElseThenFlashColor: '#ffffff',
};
et les utiliser comme ça
$('#element').effect("highlight", {color:theme.whateverFlashColor}, 1000);
facile :)
Essayez avec le plugin jquery.blink.js:
https://github.com/webarthur/jquery-blink
<script src="http://code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<script src="/path/to/jquery.blink.js"></script>
<script>
jQuery('span').blink({color:'white'}, {color:'black'}, 50);
</script>
#prendre plaisir!
<script>
$(document).ready(function(){
var count = 0;
do {
$('#toFlash').fadeOut(500).fadeIn(500);
count++;
} while(count < 10);/*set how many time you want it to flash*/
});
</script
Vérifiez-le -
<input type="button" id="btnclick" value="click" />
var intervalA;
var intervalB;
$(document).ready(function () {
$('#btnclick').click(function () {
blinkFont();
setTimeout(function () {
clearInterval(intervalA);
clearInterval(intervalB);
}, 5000);
});
});
function blinkFont() {
document.getElementById("blink").style.color = "red"
document.getElementById("blink").style.background = "black"
intervalA = setTimeout("blinkFont()", 500);
}
function setblinkFont() {
document.getElementById("blink").style.color = "black"
document.getElementById("blink").style.background = "red"
intervalB = setTimeout("blinkFont()", 500);
}
</script>
<div id="blink" class="live-chat">
<span>This is blinking text and background</span>
</div>