2010-11-17 32 views

Trả lời

10

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); 
} 
+0

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

+1

@Nobita tốt, cảm ơn. Cố định – Basic

+0

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

0

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'});

+0

Suy nghĩ tốt đẹp - Tôi sẽ phải nhìn vào những gì thực sự làm đằng sau hậu trường – Basic

+2

Điều đó vẫn gây ra một sự hồi tưởng. – Tower

5

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

+1 Chắc chắn là phương pháp tiếp cận, theo quan điểm của tôi. – lonesomeday

+2

-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

0

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.

+1

Điều đó vẫn gây ra hiện tượng trào ngược. – Tower

4

sử dụng:

document.getElementById('elemnt_ID').setAttribute('style','color:white; margin:5px;'); 
Các vấn đề liên quan