Sé que alterar el estilo de los elementos directamente a través de JavaScript provocará un reflujo. Sin embargo, me preguntaba si es posible alterar múltiples valores de estilo en un lote con solo un reflujo.¿Hay alguna manera de aplicar estilos CSS múltiples en un lote para evitar múltiples reflujos?
Respuesta
No directamente, pero hay algunas buenas sugerencias acerca de cómo minimizar el impacto de los reflujos aquí:
http://dev.opera.com/articles/view/efficient-javascript/?page=3
En resumen, intentar algo como esto:
El segundo método consiste en definir una nuevo atributo de estilo para el elemento, en lugar de asignar estilos uno por uno. La mayoría de las veces esto es adecuado para cambios dinámicos como animaciones, donde los nuevos estilos no se pueden conocer con antelación. Esto se hace usando la propiedad cssText del objeto de estilo , o usando setAttribute. Internet Explorer no permite la segunda versión , y necesita la primera. Algunos navegadores más antiguos, incluido Opera 8, necesitan el segundo enfoque, y no entienden el primero. Por lo tanto, la forma fácil es comprobar si la primera versión es es compatible y usarla, luego caer de nuevo a la segunda si no.
var posElem = document.getElementById('animation');
var newStyle = 'background: ' + newBack + ';' +
'color: ' + newColor + ';' +
'border: ' + newBorder + ';';
if(typeof(posElem.style.cssText) != 'undefined') {
posElem.style.cssText = newStyle; // Use += to preserve existing styles
} else {
posElem.setAttribute('style',newStyle);
}
Se puede poner todos los estilos en un CSS clase
.foo { background:#000; color:#fff; ... }
y después asignarlo a la propiedad className
// javascript
var your_node = document.getElementById('node_id');
your_node.className = 'foo'
que deben dar lugar a sólo un repinte/reflujo
+1 Definitivamente el enfoque a seguir, en mi opinión. – lonesomeday
-1 No responde realmente la pregunta, si las propiedades fueron preconocidas, obviamente la clase CSS sería el camino a seguir, sin embargo, si está utilizando js para calcular. los valores, entonces esto no funcionaría. – Kayote
También podemos establecer la visibilidad del elemento de 'oculto', a continuación, aplicar los estilos y luego hacerla visible de nuevo.
Eso todavía causa un reflujo. – Tower
uso:
document.getElementById('elemnt_ID').setAttribute('style','color:white; margin:5px;');
- 1. ¿Hay un diseño HTML estándar con múltiples estilos CSS disponibles?
- 2. ¿Cómo puedo aplicar estilos XAML múltiples a un elemento?
- 3. ¿Cómo puedo aplicar estilos a múltiples clases a la vez?
- 4. ¿Cómo aplicar múltiples transformaciones en CSS?
- 5. ¿Hay alguna manera de lograr el enlace de datos múltiples para un solo elemento en KnockoutJS?
- 6. ¿Hay alguna manera de resaltar búsquedas múltiples en (g) Vim?
- 7. ¿Hay alguna manera de agregar múltiples receptores en Python SMTPlib?
- 8. ¿Hay alguna manera de seleccionar múltiples tipos de campos de entrada con CSS?
- 9. ¿Cómo pasar múltiples params en lote?
- 10. ¿Hay alguna manera de evitar recursiones innecesarias?
- 11. Aplicar múltiples transformaciones a un UIView/CALayer
- 12. elementos múltiples con css similar
- 13. ¿Hay alguna manera de aplicar pestañas en lugar de espacios?
- 14. ¿Hay alguna manera más simple de verificar valores múltiples contra un valor en un enunciado if?
- 15. ¿Hay alguna forma de crear múltiples activadores en un script?
- 16. ¿Hay alguna manera de establecer múltiples valores predeterminados en un dict de Python usando otro dict?
- 17. En WPF, ¿hay alguna manera de combinar dos estilos para un control?
- 18. Múltiples filtros CSS en IE
- 19. múltiples padres en estilos Android xml
- 20. ¿Hay alguna manera de usar un creador de estilos para las propiedades de las propiedades?
- 21. ¿Hay alguna manera de exponer múltiples servicios de WCF a través de un punto final único?
- 22. ¿Hay alguna manera de aplicar una columna única usando doctrine2?
- 23. ¿Hay alguna manera de declarar una variable que implementa múltiples interfaces en .Net?
- 24. ¿Hay alguna manera de evitar la búsqueda lineal en esto?
- 25. ¿Hay alguna manera de evitar $ this-> en todas partes?
- 26. ¿Puede definir múltiples TargetTypes para un estilo XAML?
- 27. En Heroku, ¿hay alguna forma de agregar múltiples anzuelos HTTP?
- 28. ¿Hay alguna manera de usar errno de forma segura en una aplicación de subprocesos múltiples?
- 29. ¿Cómo puedo aplicar mi hoja de estilos CSS a una fuente RSS?
- 30. Google inicios de sesión múltiples: ¿hay alguna manera de especificar la cuenta en la URL?
buen enfoque. Solo tenga en cuenta que la primera parte del 'if' anulará cualquier estilo en línea ya presente. Establecer 'posElem.style.cssText + = newStyle' hará el truco de todos modos. Ver [violín] (http://jsfiddle.net/gleezer/Ae4XR/1/) – Nobita
Buena captura de @Nobita, gracias. Corregido – Basic
En realidad, podría ser que la sentencia if podría abandonarse dejando solo 'posElem.style.cssText + = newStyle' (de nuevo, ver actualizado [violín] (http://jsfiddle.net/gleezer/Ae4XR/2/)), ya que parece funcionar de la misma manera, incluso si los estilos no están ya allí. Sin embargo, no estoy seguro acerca de los caprichos del navegador aquí. – Nobita