Tôi biết rằng phong cách của yếu tố thay đổi thông qua JavaScript trực tiếp sẽ gây ra một sự tái tạo. Tuy nhiên, tôi đã tự hỏi nếu nó có thể thay đổi nhiều giá trị phong cách trong một lô chỉ với một reflow?Có cách nào để áp dụng nhiều kiểu CSS trong một lô để tránh nhiều lần lặp lại không?
Trả lời
Không trực tiếp nhưng có một số gợi ý tốt về giảm thiểu tác động của chỉnh lại dòng ở đây:
http://dev.opera.com/articles/view/efficient-javascript/?page=3
Nói tóm lại, hãy thử một cái gì đó như thế này:
Cách tiếp cận thứ hai là để xác định một thuộc tính phong cách mới cho phần tử, thay vì gán kiểu một cho một, một. Thông thường, điều này phù hợp với thay đổi động chẳng hạn như hoạt ảnh, nơi không thể biết trước các kiểu mới . Điều này được thực hiện bằng cách sử dụng thuộc tính cssText của đối tượng kiểu hoặc bằng cách sử dụng setAttribute. Internet Explorer không cho phép phiên bản thứ hai và cần phiên bản đầu tiên. Một số trình duyệt cũ hơn, bao gồm Opera 8, cần cách tiếp cận thứ hai và làm không hiểu đầu tiên. Vì vậy, cách dễ dàng là kiểm tra xem phiên bản đầu tiên có được hỗ trợ và sử dụng không, sau đó giảm quay lại phiên bản thứ hai nếu không.
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);
}
Nếu bạn đang sử dụng jQuery, nó có một chức năng .css cho phép bạn thêm nhiều phong cách cùng một lúc:
$ ('element').css({'color':'red', 'border':'#555 solid thin'});
Bạn có thể đặt tất cả các phong cách trong một CSS lớp
.foo { background:#000; color:#fff; ... }
và sau đó gán nó cho thuộc tínhName class
// javascript
var your_node = document.getElementById('node_id');
your_node.className = 'foo'
Điều đó sẽ kích hoạt chỉ có một repaint/reflow
+1 Chắc chắn là phương pháp tiếp cận, theo quan điểm của tôi. – lonesomeday
-1 Doesnt thực sự trả lời câu hỏi, nếu các thuộc tính đã được biết, rõ ràng là lớp CSS sẽ là con đường để đi, tuy nhiên, nếu bạn đang sử dụng js để calc. các giá trị, sau đó điều này sẽ không hoạt động. – Kayote
Bạn có thể thiết lập tầm nhìn của phần tử để 'ẩn', sau đó áp dụng các phong cách và sau đó làm cho nó có thể nhìn thấy một lần nữa.
Điều đó vẫn gây ra hiện tượng trào ngược. – Tower
sử dụng:
document.getElementById('elemnt_ID').setAttribute('style','color:white; margin:5px;');
- 1. Làm cách nào để áp dụng kiểu cho nhiều lớp cùng một lúc?
- 2. Làm cách nào để áp dụng ngắt trang CSS để in một bảng có nhiều hàng?
- 3. Áp dụng nhiều thuộc tính CSS trong một dòng
- 4. Làm cách nào để áp dụng nhiều kiểu XAML cho một phần tử?
- 5. Biểu đồ lặp lại nhiều lần
- 6. Cách Pythonic và hiệu quả để xác định nhiều regex để sử dụng trong nhiều lần lặp
- 7. Mèo một tập tin Nhiều lần Không có vòng lặp
- 8. Tài liệu Python: có thể lặp lại nhiều lần?
- 9. Nhiều lần lặp
- 10. Có cách nào tốt nhất để tránh thực hiện quá trình nhiều hơn một lần trong Oracle không?
- 11. Trong Perl, cách tránh mở các tệp nhiều lần
- 12. Áp dụng nhiều chức năng cho cùng một kiểu điểm không có giá trị trong Haskell
- 13. Tên Python có thể lặp lại có thể được lặp lại nhiều lần
- 14. Làm cách nào để tránh nhiều lần khẳng định trong thử nghiệm đơn vị này?
- 15. Làm thế nào để tránh lặp lại tải lại video HTML trong cùng một trang?
- 16. Tránh phù hợp với .WillOnce nhiều lần trong Google Mock
- 17. Làm thế nào để tránh lặp lại trong MSBuild?
- 18. Lặp lại thử nghiệm chạy thử nhiều lần
- 19. Có thể tăng/giảm vòng lặp cho nhiều lần không?
- 20. Cách tránh đọc tệp thuộc tính nhiều lần
- 21. Làm thế nào để tạo chuỗi chiều dài bao gồm cùng một nhân vật lặp đi lặp lại nhiều lần?
- 22. áp dụng kiểu css cho một lớp lồng trong div
- 23. Áp dụng kiểu WPF cho nhiều điều khiển
- 24. C# Generics để tránh lặp lại mã?
- 25. Lặp lại nền giới hạn CSS (nhiều hình nền)
- 26. Làm cách nào để áp dụng các kiểu CSS cho các đối tượng Raphael.js bằng jQuery?
- 27. Có cách nào để viết Phương thức mở rộng áp dụng cho nhiều loại không?
- 28. Sử dụng lại PreparedStatement nhiều lần
- 29. Lặp lại vòng lặp cho vòng lặp% x% lần trong lô
- 30. Lô Windows: gọi nhiều lệnh trong vòng lặp FOR?
Tốt cách tiếp cận. Chỉ cần cẩn thận rằng phần đầu tiên của 'if' sẽ ghi đè lên bất kỳ kiểu nội tuyến đã có sẵn nào. Thiết lập 'posElem.style.cssText + = newStyle' sẽ thực hiện thủ thuật. Xem [fiddle] (http://jsfiddle.net/gleezer/Ae4XR/1/) – Nobita
@Nobita tốt, cảm ơn. Cố định – Basic
Trên thực tế nó có thể là tuyên bố nếu có thể được bỏ rơi để lại chỉ 'posElem.style.cssText + = newStyle' (một lần nữa, xem cập nhật [fiddle] (http://jsfiddle.net/gleezer/Ae4XR/2/)) vì nó dường như hoạt động theo cách tương tự ngay cả khi kiểu dáng chưa có ở đó. Bạn không chắc chắn về trình duyệt quirks ở đây mặc dù. – Nobita