-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjquery.storage.image.js
95 lines (90 loc) · 2.75 KB
/
jquery.storage.image.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
*
* @fileOverview jquery.storage.image.js
* @author syunsuke fujishiro
* @license <a href="http://en.wikipedia.org/wiki/MIT_License">X11/MIT License</a>
*
*/
(function(jQuery) {
$.fn.storageImage = function (imgSrc,version) {
"use strict";
if (!version) version = "";
var selector = $(this).selector.slice(1);
var setData = function (tgt,data_img) {
if (!data_img) {
console.log("no data_img");
return 1;
}
var tag = tgt.tagName;
if (tag == "DIV") {
$(tgt).css("background-image","url(" + data_img + ")");
} else if (tag == "IMG") {
tgt.src = data_img;
return 1;
}
return 1;
}
return this.each(function(){
var tgt = $(this).get(0);
// var lStorage = localStorage;
var lStorage = sessionStorage;
if (!lStorage) {
return 1;
}
/*Android 2系はtoDataURLが使えない為
そのままsrcを当て込む*/
if (navigator.userAgent.search(/Android 2.[123]/) != -1) {
setData(tgt,imgSrc);
return 1;
}
var idName = this.id;
var data_img;
var key;
if (idName) {
key = this.id;
} else if (selector) {
key = selector;
}
key = key + "_" + version;
data_img = lStorage.getItem(key);
if (!data_img) {
/*no storage*/
var img = new Image();
var idName = this.id;
img.src = imgSrc;
var canvas;
if (idName) {
$(this).after('<canvas id="canvas_'+ this.id +'" style="display:none"></canvas>');
canvas = $("#canvas_"+ this.id).get(0);
} else if (selector) {
$(this).after('<canvas class="canvas_'+ selector +'" style="display:none"></canvas>');
canvas = $(".canvas_"+ selector).get(0);
}
var ctx = canvas.getContext("2d");
img.onload = function() {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img,0,0);
data_img = canvas.toDataURL();
//セットに失敗したら
//srcをそのままsetData
//そしてデータをクリアする
try {
lStorage.setItem(key, data_img);
} catch(e) {
if (e.name === 'QuotaExceededError' || e.name === 'NS_ERROR_DOM_QUOTA_REACHED') {
lStorage.clear();
data_img = imgSrc;
} else {
console.log(e);
}
};
//読み終わった後に実行
setData(tgt,data_img);
};
} else {
setData(tgt,data_img);
}
});
};
})(jQuery);