Por fín, he decidido meter mano a este viejo script. Visto que se está empleando en varios sitios he intentado arreglar algunos problemas que tenía, y he añadido algunas mejoras.
- Añadido soporte de pie de foto: Segundo parámetro de la funcion open() o el atributo ‘title’ de la imagen.
- Añadido atributo ‘effect’ para definir la animación al aparecer/desaparecer. De momento disponibles ‘bounce’ (por defecto) o ‘easeout’.
- Haciendo click fuera de la imagen esta se cierra (ya no se cierra al hacer click en ella).
- Ya no es necesario declarar el objeto JSPopViewer al final del documento.
- Corregido problema comprobar si la imagen ha cargado.
- Corregido problema comprobar el tamaño de la imagen en IE.
- Corregidos algunos problemas con los estilos.
Se puede descargar en el siguiente enlace: [Descargar]
Publicado en General, Programación | Deja un comentario
El evento ‘onresize’ se lanza cuando un elemento HTML cambia de tamaño. Pero tenemos el problema de que sólo Internet Explorer lo lanza en el momento del cambio de tamaño del elemento, mientras que el resto de navegadores lo hace solo al cambiar el tamaño de la ventana del navegador.
Este pequeño plugin jQuery ayudará a detectar cambios de tamaño en cualquier elemento HTML, lanzando un evento onResize ‘casi’ en el momento del cambio.
$.fn.addOnResizeEvent = function(custom_options) {
var options = {
timeInterval : 100,
forceIE : false
}
$.extend( custom_options, options );
// Soporte nativo IE
if ($.browser.ie && !options.forceIE) return;
return this.each( function() {
var target = $(this);
var lw, lh;
var interval = setInterval( function() {
var w = target.width(),
h = target.height();
if (!lw == undefined) lw = w;
if (!lh == undefined) lh = h;
if ( lw != w || lh != h )
{
lw = w;
lh = h;
target.trigger( "resize" );
}
}, options.timeInterval );
} );
};
Y su modo de uso:
$("div.miDiv").addOnResizeEvent()
$("div.miDiv").resize( function() {
alert("Cambié de tamaño");
} );
En caso de estar navegando con Internet Explorer este plugin no tendrá efecto dejando la activación del evento nativa. Sin embargo, puede forzarse pasandole un parametro ‘forceIE‘ como ‘true‘.
Además, permite modificar el tiempo entre chequeos de tamaño por el parámetro ‘timeInterval‘, indicando la espera en milisegundos.
El modo de asignar los parámetros es el siguiente:
$("div.miDiv").addOnResizeEvent({
timeInterval : 200,
forceIE : true
})
Una última recomendación, y por temas de rendimiento, es la de asignar esta función solamente a aquellos elementos que quiera registrarse un cambio de tamaño.
Publicado en Programación | Deja un comentario
Otro pequeño aporte para resaltar las teclas de acceso rápido (el atributo ‘accesskey’) de los enlaces, cómo no, con la ayuda de jQuery (en este caso pequeña). Muy útil, por ejemplo, para la realización de menús de navegación sin tener que ‘ensuciar’ el HTML.
Primero, necesitamos asignar un estilo a la letra a resaltar. Optaremos por un simple subrayado.
a .accesskey {
text-decoration:underline;
}
Y ahora viene la magia. Realizamos un recorrido por los enlaces de la página y realizamos el cambio:
$("a").each( function() {
var html, reg, rep;
if (this.accessKey)
{
html = $(this).html();
if (!/</g.test(html))
{ // No contiene HTML
reg = new RegExp("("+this.accessKey+")","i");
rep = "<span class='accesskey'>$1</span>";
}
else
{ // Contiene HTML
reg = new RegExp("(<[^>]*>.*)("+this.accessKey+")(.*</[^>]*>)", "i");
rep = "$1<span class='accesskey'>$2</span>$3";
}
$(this).html( html.replace( reg, rep ) );
}
});
Evidentemente, será requisito que el texto del enlace contenga la letra equivalente a la tecla de acceso rápido.
Y muy importante, por supuesto, realizar este escaneo una vez sea accesible el DOM completo de la página.
$(document).ready( function() {
// Nuestro script
} );
Publicado en Programación | Deja un comentario
Un pequeño script rápido y muy sencillo que he elaborado para jQuery, que hace lo que el título de esta entrada. Hasta ahora estaba usando uno de los textOverflow que andan por ahí, pero me estaban dando algún problema.
$.fn.ellipsis = function() { return this.each( function() {
var tar = $(this),
ow, ls, tg,
tw=tar.css({"display":"block","white-space":"nowrap"}).width(),
ot=tar.html(), pt=ot,
alt=tar.text(),
ok=false,
ct=false,
el=' …';
tar.css({"position":"absolute"});
while (!ok) {
ow = tar.css({"width":"auto"}).width();
if (ow > tw) {
ls = pt.lastIndexOf(" ");
tg = (new RegExp( "<[^>]*$", "g" )).test( pt.substr(0, ls) );
if (ls > 0) {
pt = pt.substr(0, ls);
tar.html( pt + el );
ct=true;
} else {
tar.html( el ).attr("title", alt);
ok=true && !tg;
}
} else {
if (ct) {
tar.attr("title", alt);
tar.css({"display":"block","width":tw+"px"});
}
ok = true;
}
}
tar.css({"position":""});
}); }
Y para usarlo.
$(".textodeunalinea").ellipsis()
Actualización 27-10-2010: Se han hecho algunas correcciones. Y un detalle; se porta un poquito mal cuando hay Html en el texto. Pendiente de corregir.
Publicado en Programación | Deja un comentario
Os dejo una pequeña y sencilla función para realizar esta tarea en Javascript. Evidentemente, está sujeto a las mejoras que creáis convenientes.
function XMLString( object, name, recursiveCall ) {
var xml = "", i;
var isArray = typeof(object) === 'object' && typeof(object.length) === 'number' && !(object.propertyIsEnumerable('length')) && typeof(object.splice === 'function');
if (!recursiveCall) {
xml += "<?xml version=\"1.0\" ?>";;
xml += "<"+name+" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">";
} else if (!isArray) {
xml += "<"+name+">";
}
if (typeof(object) === "undefined" || object == null) return ""; //Nada
else if (typeof(object) === "object") for (i in object) xml += XMLString( object[i], isArray?name:i, true); // Un objeto o array
else xml += object; // Un texto
if (!isArray || !recursiveCall) xml += "</"+name+">";
return xml;
}
Y un ejemplo de uso sería:
var objeto = {
campo1 : "valor1",
campo2 : "valor2",
campo3 : "valor3"
}
alert( XMLString( objeto, "XML" ) );
Donde el primer parámetro es el objeto a convertir, y el segundo es el nombre del elemento raíz. Con el ejemplo anterior obtendríamos como salida la siguiente cadena:
<?xml version="1.0" ?>
<XML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<campo1>valor1</campo1>
<campo2>valor2</campo2>
<campo3>valor3</campo3>
</XML>
Con 4 cambios es posible convertirlo en código AS2 o AS3. Aunque en estos casos creo que hay métodos mejores y nativos para hacer esta función.
Publicado en Programación | Deja un comentario
De todos es conocido el problema de emplear la pseudo-clase :hover con Internet Explorer 6. Este funciona solamente con los hipervínculos (<a></a>) dejando fuera al resto de elementos.
Con la ayuda de jQuery, podemos solventar de manera fácil este problema añadiendo unas lineas al inicio del script, y teniendo en cuenta una regla en el CSS que contenga los estilos.
Por ejemplo, teniendo el siguiente CSS:
#menu li:hover {
text-decoration:underline:
}
Habría que modificarlo tal que:
#menu li:hover, #menu li.hover {
text-decoration:underline;
}
De manera que podamos acceder a dicho estilo mediante una clase.
Y ahora, solo quedaría realizar un script que añada la clase o la elimine según el evento llamado. Para ello emplearemos la función hover(mouseOver, mouseOut) que nos facilita jQuery.
$(document).ready( function() {
if ($.browser.msie) $("*").hover( function() { $(this).addClass("hover"); }, function() { $(this).removeClass("hover"); } );
});
Y a funcionar
Publicado en Programación | Deja un comentario