Chào các bạn, mình đang code 1 đoạn js hover zoom image và gặp 1 chút khó khăn như sau, mong các bạn giúp đỡ.
Cách hoạt động:
- Khi hover chuột vào ảnh thì sẽ hiện hiệu ứng loading ( là hình vòng tròn ). Lúc này mình sẽ thêm 1 class là
loading
vào thẻdiv
. - Khi ảnh được tải xong HOÀN TOÀN thì hiệu ứng loading biến mất và hiển thị background là cái image vừa load được và xóa class
loading
kia đi.
Vấn đề mình gặp phải:
- Mình có sử dụng
Image()
để bắt sự kiện ảnhonload
nhưng khi load ảnh xong và setbackgroundImage
cho thẻdiv
, hiệu ứng loading đã kết thúc mà ảnh vẫn đang tải để hiện ra. - Trong một số trường hợp, khi kết thú hiệu ứng loading,
backgroundImage
chưa sẵn sàng để hiển thị thì sẽ xuất hiện 1 khoảng trắng ( các bạn có thể test bằng cách bật devtool hoặc bỏ cache và load lại là thấy )
Câu hỏi của mình:
- Trong trường hợp của mình có event nào để bắt khi ảnh được tải xong HOÀN TOÀN
vàbackgroundImage
đã sẵn sàng để hiển thị không? - Hoặc có cách nào để tối ưu nhất có thể cho trường hợp của mình không?
- Mình thấy để time delay qua hàm
setTimeout()
thì không được ổn.
Đây là code của mình: https://codepen.io/notrealdev/pen/MWKXGxX
Vấn đề thì ngắn nhưng có thể mình trình bày hơi dài dòng, mong được các bạn hiểu được vấn đề mình muốn trình bày.
Cám ơn mọi người đã đọc bài.