tôi sử dụng <canvas>
để vẽ tất cả các ghi chú và glyphs trong các ứng dụng web giáo dục âm nhạc của tôi: http://www.musictheory.net/exercises/keysig/bc98yydịp hiếm hoi, <canvas> không vẽ lại
Một Firefox sử dụng 15.0.1 đã báo cáo rằng đôi khi cuộc tập trận diễn ra vào câu hỏi tiếp theo, nhưng khung vẫn hiển thị câu hỏi trước. Tôi đã thấy điều này xảy ra trong thử nghiệm một lần (trong số ~ 500 câu hỏi).
Khi nó xảy ra, vải đã được giải tỏa qua cả canvas.width = canvas.width
và một cuộc gọi đến .clearRect
vào bối cảnh và glyphs đã được rút ra trong JavaScript qua .beginPath
, .quadraticCurveTo
, .closePath
, vv Tuy nhiên, nó có vẻ như đệm ủng hộ của vải không bao giờ bị đỏ bừng/bị cuốn vào cửa sổ.
Tôi đã thấy báo cáo lỗi trong quá khứ liên quan đến vấn đề tương tự:
- https://bugzilla.mozilla.org/show_bug.cgi?id=787623
- https://bugzilla.mozilla.org/show_bug.cgi?id=794337
- http://code.google.com/p/chromium/issues/detail?id=55339
tôi có thể buộc một vẽ lại bằng cách thực hiện một DOM Hack như chèn một nút văn bản dưới dạng con của canvas và sau đó loại bỏ nó trên chu kỳ vòng lặp chạy tiếp theo hoặc sửa đổi màu nền hoặc phần đệm của Tranh sơn dầu. Điều này có vẻ nặng tay, tuy nhiên, và tôi tiếp tục có cảm giác dai dẳng rằng tôi đang thiếu một cái gì đó hiển nhiên.
mã vẽ của tôi là đủ đơn giản:
canvas.width = width;
ctx.clearRect(0, 0, width, height);
ctx.save();
// Lots of drawing code here
ctx.restore()
ctx.clearRect(0, 0, 1, 1); // Helped force a repaint on some older WebKit browsers?
tôi đã đảm bảo rằng số lượng .save
và .restore
cuộc gọi được cân bằng.
1) Tôi đang gọi mã này trực tiếp để đáp ứng với trình xử lý sự kiện onclick
. Thay vào đó, tôi có nên sử dụng requestAnimationFrame
hoặc setTimeout
để thực hiện việc vẽ trên chu kỳ vòng lặp chạy trong tương lai không?
2) Tôi không bỏ lỡ điều gì đó hiển nhiên, như API canvas.pleaseRepaintNow()
, phải không?
3) Những người khác có gặp phải các sự cố tương tự và phải sửa đổi DOM để buộc vẽ lại không?
Upvoting do setTransform(), điều mà tôi chắc chắn bị thiếu. Vấn đề vẫn còn, tuy nhiên: ( – iccir
Bạn có một phương pháp để làm cho nó đáng tin cậy xảy ra? Hoặc chỉ cần giữ cách nhấn? – Bill
Tôi không, nó chỉ xảy ra trên máy tính của tôi một lần.Tuy nhiên, người dùng có thể tái tạo một cách đáng tin cậy trong 100 câu hỏi (chạy Firefox 15.0.1 trên OS X 10.7 trên MacBook Pro 2011). Tôi đã cố gắng để phù hợp với cấu hình của mình càng gần càng tốt, nhưng không có may mắn trong tái tạo. – iccir