Search

JQuery - Image onLoad 讀取/載入完成事件

2014-11-23 7:42 PM

以下程式碼範例為圖片讀取完成後
淡出原本容器的背景 再淡入背景圖片的效果

程式碼範例
  1. var target = $(value);
  2. var src = "/image/cover/thumbnail";
  3. $('<img/>').attr('src', src).on("load", function() {
  4. var base64 = convertImgToBase64( $(this)[0] );
  5. $(this).remove();
  6.  
  7. TweenMax.to(target, 0.5, {
  8. alpha:0,
  9. ease:Quad.easeInOut,
  10. onCompleteParams:[target, base64],
  11. onComplete:function(t, i){
  12. t.css("background", "rgba(31, 31, 31, 1) url(" + i + ") no-repeat center center");
  13. TweenMax.to(t, 1.3, {alpha:1, ease:Quad.easeInOut});
  14. }
  15. });
  16. });
  17.  
  18. function convertImgToBase64(img){
  19. var canvas = document.createElement('CANVAS');
  20. var ctx = canvas.getContext('2d');
  21. canvas.height = img.height;
  22. canvas.width = img.width;
  23. ctx.drawImage(img, 0, 0);
  24. var dataURL = canvas.toDataURL();
  25. canvas = null;
  26. return dataURL;
  27. }
詳細解說
  1. // 取得要加入背景圖片的物件
  2. var target = $("#coverDiv");
  3. // 設定URL
  4. var src = "/image/cover/thumbnail";
  5. // 建立圖片讀取及暫存物件
  6. $('<img/>').attr('src', src).on("load", function() {
  7. // 讀取完成後將圖片轉換為base64編碼
  8. // 以防止瀏覽器無設定快取時造成圖片重複讀取
  9. var base64 = cmc.util.convertImgToBase64( $(this)[0] );
  10.  
  11. // 避免佔用記憶體
  12. $(this).remove();
  13.  
  14. // 再將base64編碼指定至background url即可
  15. // 此處為加入動畫釋例
  16. // 完成讀取後使用淡出原本背景 -> 淡入圖片背景效果
  17. TweenMax.to(target, 0.5, {
  18. alpha:0,
  19. ease:Quad.easeInOut,
  20. onCompleteParams:[target, base64],
  21. onComplete:function(t, u){
  22. t.css("background", "rgba(31, 31, 31, 1) url(" + u + ") no-repeat center center");
  23. TweenMax.to(t, 1.3, {alpha:1, ease:Quad.easeInOut});
  24. }
  25. });
  26. });
  27.  
  28. // 將圖片物件轉換為base64編碼
  29. function convertImgToBase64(img){
  30. // 首先建立canvas物件 必須使用到cavas物件的方法
  31. var canvas = document.createElement('CANVAS');
  32. // 設定內容為2D
  33. var ctx = canvas.getContext('2d');
  34. // 將cavas的寬高設定為與圖片相同
  35. canvas.height = img.height;
  36. canvas.width = img.width;
  37.  
  38. // 繪製圖片至cavas內
  39. ctx.drawImage(img, 0, 0);
  40. // 使用cavas的toDataURL功能轉換為base64編碼
  41. var dataURL = canvas.toDataURL();
  42.  
  43. // 清除cavas物件
  44. canvas = null;
  45. return dataURL;
  46. }
各項資料連結
JQuery 官方網站
Base64 - 維基百科

No comments:

Post a Comment