ejemplos animate jquery plugins effects jquery-animate jquery-effects

animate - ¿Tiene jQuery un complemento para mostrar una "barra de mensajes" como la barra de "contraseña incorrecta" de Twitter en la parte superior de la pantalla?



jquery ui (2)

Bueno, jugué y presenté esta agradable función:

[ejemplo en vivo en http://jsfiddle.net/2arVf/ ]

// // Usage: sendMessage(message, yes_text, no_text, class_to_style, callback_yes, callback_no) -- for yes/no // or: sendMessage(message, class_to_style[, timeout]) -- informative with optional auto-hide after timeout // var sendMessage = function(str,yes,no,my_class,callback_yes,callback_no) { clearMessageTimeout(); // clear the timeout so it doesn''t accidentaly slide up if (typeof no == ''string'') { // check if this is a yes/no message $message.slideUp(0, function() { // slide up if not already // scroll to the top so the user gets to see the message $("html").animate({''scrollTop'': 0}, ''fast'', function() { // then $message .unbind(''mouseout'').attr(''class'','''') // kill old classes .addClass(my_class) // add our class styling .html([ str, ''<br />'', // create an array to add our // two handlers with #yes and #no IDs ''<button id="yes">'', yes ,''</button>'', ''<button id="no">'' , no ,''</button>'' ].join('''') // join the array and ) // insert message .slideDown(1000) // slide the message down .find(''#yes,#no'') // find #yes and #no .click(function() { // add click handler to #yes and #no var answer=$(this).attr(''id''); // should be ''yes'' or ''no'' $message.slideUp(1000, function() { // slide up and $("html").animate({''scrollTop'': 0}, // scroll to top again and eval(''callback_'' + answer) // call our callback ); }); }); }); }); } else { $message .unbind(''mouseout'') // unbind previous mouseout .attr(''class'','''') // kill old classes .addClass(yes) // add our class .html(str) // insert our message .slideDown(1000, function() { // slide down the message $message.mouseout(function() { // bind mouse out setMessageTimeout(function() { // with a timeout if the pointer comes back $message.slideUp(1000); // to slide back up }, 1000); // after 1 second }); }); if (typeof no == ''number'') { // if a timeout is specified setMessageTimeout(function() { // then it sets it $message.slideUp(1000); // to slide up by itself }, no); // after x milliseconds } } } // Initialize messenger $("<div></div>").prependTo(''body'').attr(''id'',''message''); var $message = $("#message") .mousemove(clearMessageTimeout), message_timeout; function setMessageTimeout(callback, time) { clearTimeout(message_timeout); message_timeout = setTimeout(callback, time); } function clearMessageTimeout() { clearTimeout(message_timeout); }

Ejemplo:

$(".invoke_message").click(function(e) { sendMessage( [ ''Here I am, a message..'', ''I can be multiline'', ''<strong>and have any html</strong>'',, ''Do you like me?'' ].join(''<br />''), ''Yeap'',''Nope'', // yes and no text ''normal'', // normal class function() { // yes callback sendMessage(''Thank you. I/'ll be gone in 3 secs'', ''happy'', 3000); }, function() { // no callback sendMessage(''OK, have it your way then. You need to mouseout me to make me leave'', ''sad''); } ); return false; });

CSS:

body { padding:0; margin:0; } strong { font-weight:bold; } #message { color:#fff; text-align:center; } .normal { background-color:#888; } .happy { background-color:#cc2; } .sad { background-color:#b44; }

HTML:

<p>I''m the main page. I''ll do some space if there is a message</p> <p><a class="invoke_message" href="#">Click me</a></p> .<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br />.<br /><p><a class="invoke_message" href="#">Click me too</a></p>

Twitter mostrará una barra de mensajes en la parte superior de la pantalla que dice "Contraseña incorrecta" y después de 10 segundos, se deslizará hacia arriba y desaparecerá. Chrome también muestra el cuadro de mensaje "¿Desea guardar la contraseña?" De esa manera.

¿JQuery tiene un complemento para hacer eso ya? ¿También funciona en IE 6? Debido a que generalmente, la visualización de la ventana gráfica (usando la position: fixed ) no funcionará en IE 6. gracias.

Actualización: gracias por las buenas soluciones: deliberadamente quería que funcionara (1) incluso cuando el usuario se haya desplazado hacia abajo por la página, que se mostrará en la parte superior de la pantalla de la ventana y (2) la barra puede elegirse para mostrar en la parte inferior de la pantalla de la ventana en su lugar (como una opción) ... y si funciona en IE 6, entonces es aún mejor ... los programadores pobres hoy en día ...


Puedes hacer esto con solo unas pocas líneas de código, como esta:

​​​​function topBar(​​​message) { $("<div />", { ''class'': ''topbar'', text: message }).hide().prependTo("body") .slideDown(''fast'').delay(10000).slideUp(function() { $(this).remove(); }); }

Entonces solo dale a la clase que uses un poco de estilo, por ejemplo:

.topbar { background: #990000; border-bottom: solid 2px #EEE; padding: 3px 0; text-align: center; color: white; }​

Puede ver una demostración en funcionamiento aquí , ajustar según sea necesario :) Esto crea un <div> sobre la marcha, lo agrega a la parte superior del cuerpo, por lo que no debe preocuparse por un posicionamiento funky, esto debería estar bien en IE6. Cuando haya terminado, se deslizará hacia arriba y eliminará el <div> creado para la limpieza. Puede agregar un manejador de clics para eliminarlo al instante, etc., sean cuales sean sus necesidades.