2012-06-29 29 views
7
  1. tôi đặt một rgba() bg màu trong Chrome (Win7, 19.0.1084.56)
  2. tôi nhận được background-color với window.getComputedStyle(), & nó khác
  3. tôi đặt lấy giá trị trên một yếu tố mới
  4. tôi lấy nó một lần nữa, của nó khác nhau một lần nữa

đây là một fiddle: http://jsfiddle.net/zupa/KsuMp/Chrome getComputedStyle() trả về màu RGBA sai?

01.

Trong trường hợp của tôi, 4 khối đầu tiên có các nội dung sau đây trong Chrome:

  • bg-color: rgba (255, 0, 0, 0,503906)
  • bg-color: rgba (255, 0 , 0, 0,5)
  • bg-color: rgba (255, 0, 0, 0,496094)
  • bg-color: rgba (255, 0, 0, 0,496094)

Trong Firefox, tôi nhận được hằng số rgba (255, 0, 0, 0.506)

Vì vậy, điều này có vẻ là một lỗi. Bạn có thể chứng minh cho tôi sai hoặc đề xuất cách giải quyết khác không? Tôi cần màu sắc cho một trình soạn thảo wysiwyg và điều này là giết chết các bài kiểm tra đơn vị của tôi.

+0

Thú vị. Tôi đoán đó là lỗi làm tròn. Nếu bạn sử dụng '0,5' làm giá trị - http://jsfiddle.net/Synmu/1/ - bạn nhận được kết quả nhất quán (nhưng không phải là' 0,5'). – fuxia

+0

@toscho - kết quả nhất quán mà nó trả về chính xác là 1/256 cách 0.5, vì vậy khi tôi thấy nó chuyển đổi 0.5 thành x7F thay vì x80. Điều này có ý nghĩa vì chúng không thể ánh xạ từ 1.0 đến x100 vì giá trị cao nhất có thể là xFF. Vì vậy, đó có thể là một tinh chỉnh để phù hợp với quy mô có sẵn? – zupa

+0

Đây là trường hợp còn tệ hơn: http://jsfiddle.net/zupa/KsuMp/27/ -> giảm 10% xuống 0% OMG. Nhưng nó sẽ không giảm từ 11%: http://jsfiddle.net/zupa/KsuMp/29/ – zupa

Trả lời

0

Là một công việc xung quanh, bạn có thể thử để lưu trữ các màu RGBA gốc trong một * thuộc tính đĩa dữ liệu (data-original-background lẽ?) Vào yếu tố bạn và sử dụng $().attr() để có được những giá trị màu cũ từ đó. Bằng cách đó, mặc dù Chrome sẽ khoanh tròn theo một cách kỳ lạ, ít nhất nó cũng sẽ liên tục làm tròn theo cách giống nhau vì tất cả chúng đều sử dụng cùng một giá trị cơ bản.

Edit: Đây là một trong những fiddles của bạn tôi thay đổi với các khái niệm http://jsfiddle.net/aJfPn/1/

+0

cũng: mặc dù data- * được gọi là HTML5, vì nó chỉ thêm một phần tử mới, nó tương thích (thông qua các phương thức khác nhau) tất cả các cách quay lại IE6. jQuery thực hiện phương pháp đúng để sửa đổi thuộc tính data- * trên cơ sở mỗi trình duyệt, do đó bạn không phải lo lắng về nó :) –

+0

Đây không thực sự là một tùy chọn vì tôi muốn cập nhật trạng thái màu khi lựa chọn thay đổi trên trang.Vấn đề là, nếu màu bg thậm chí không được định nghĩa trên bất kỳ phần tử đã cho nào, thay vì được kế thừa từ một phần tử cha có một lớp với định nghĩa màu sắc? Đối với định nghĩa cục bộ, cũng có thể kiểm tra thuộc tính kiểu. Cảm ơn bạn mặc dù. – zupa

-1

Trong trường đại học tôi học được rằng bạn nên không bao giờ kiểm tra xem nổi đều bình đẳng vì lỗi làm tròn số. Chỉ cần bao gồm một sự khoan dung trong thử nghiệm của bạn.

+1

Nếu bạn chỉ định một float 10.0 và nhận được 9,0 trở lại, và bạn cho tôi biết nó là một lỗi làm tròn, tôi tốt với nó nếu 9,0 là một giá trị ổn định. Nhưng nếu tôi chỉ định nó 9.0 và nhận được 8.0 trở lại, hơn là nó thậm chí không ổn định. Đó là vấn đề của tôi, tôi không biết làm thế nào để làm tròn cái hư cấu 9.0 lên hoặc xuống. Đến nay nó có vẻ đã được sửa trong Chrome. – zupa

Các vấn đề liên quan