//调整webkit兼容性
var
indexedDB = window.indexedDB || window.webkitIndexedDB || window.mozIndexedDB || window.OIndexedDB || window.msIndexedDB,
IDBTransaction = window.IDBTransaction || window.webkitIDBTransaction || window.OIDBTransaction || window.msIDBTransaction,
dbVersion = 1.0;
var
cn,db;
//打开数据库
//第一个参数是数据库名(打开即创建,没有其它独立的创建方法)
//其它参数以后解释
var
cn=indexedDB.open(
"item"
);
//数据库初始化事件
cn.onupgradeneeded=
function
(e){
//获取数据库对象
db=e.target.result;
//创建数据库实例
//第一个是存储对象名,类似关系数据库的表名
//第二个参数是主键名,还有其他选项,可以设置自增的
var
o=db.createObjectStore(
"PicData"
,{keyPath:
"id"
}
);
};
//数据库打开成功事件
cn.onsuccess=
function
(e){
//获取数据库对象
//因为上面的初始化事件未必会被调用到,这里当然也得获取一次
db=e.target.result;
//这个doTransaction的参数是一个回调函数,可以把这个回调函数当作事物的过程使用
db.doTransaction=
function
(f){
//从事务对象闪使用objectStore访问具体的存储对象,并把结果传给回调函数
f(db.transaction(
"PicData"
,
"readwrite"
).objectStore(
"PicData"
));
};
};
// 将图片缓存的本地
function
fetchImage(id, type) {
var
src =
""
var
imageId = id;
if
(type ==
"small"
) {
src =
"../item/common/simpleImage.do?picId="
+id;
}
else
{
src =
"../item/common/simpleImage.do?type=b&picId="
+id;
imageId = (id+
"blimg"
);
}
var
elephant = document.getElementById(id);
elephant.src =
"../item/img/loading.gif"
;
try
{
var
readWriteMode =
typeof
IDBTransaction.READ_WRITE ==
"undefined"
?
"readwrite"
: IDBTransaction.READ_WRITE;
var
transaction = db.transaction([
"PicData"
], readWriteMode);
var
objectStore = transaction.objectStore(
"PicData"
);
var
request = objectStore.get(imageId);
request.onsuccess =
function
(event) {
var
data = event.target.result;
if
(data ==
null
) {
// Create XHR
var
xhr =
new
XMLHttpRequest(),
blob;
xhr.open(
"GET"
, src,
true
);
// Set the responseType to blob
xhr.responseType =
"blob"
;
xhr.addEventListener(
"load"
,
function
() {
if
(xhr.status === 200) {
// Blob as response
blob = xhr.response;
var
imgFile = blob;
// Get window.URL object
var
URL = window.URL || window.webkitURL;
// Create and revoke ObjectURL
var
imgURL = URL.createObjectURL(imgFile);
// Set img src to ObjectURL
elephant.setAttribute(
"src"
, imgURL);
// Revoking ObjectURL
elephant.onload =
function
() {
window.URL.revokeObjectURL(
this
.src);
}
// Save data in indexDB
var
picData = {};
picData.id = imageId;
picData.blob = blob;
saveInIndexDB(picData);
}
},
false
);
// Send XHR
xhr.send();
}
else
{
console.log(
"Got image !"
);
// Get window.URL object
var
URL = window.URL || window.webkitURL;
// Create and revoke ObjectURL
var
imgURL = URL.createObjectURL(request.result.blob);
// Set img src to ObjectURL
Imagess(imgURL,id);
//elephant.setAttribute("src", imgURL);
// Revoking ObjectURL
elephant.onload =
function
() {
window.URL.revokeObjectURL(
this
.src);
}
}
}
}
catch
(e) {
Imagess(src, id);
}
}
function
saveInIndexDB(picData) {
//调用我们自己添加的方法来处理一个事务
db.doTransaction(
function
(e){
e.add(picData);
});
}
//判断是否加载完成
function
Imagess(url,imgid){
var
img=
new
Image();
img.src = url;
//判断浏览器
var
Browser=
new
Object();
Browser.userAgent=window.navigator.userAgent.toLowerCase();
Browser.ie=
/msie/
.test(Browser.userAgent);
Browser.Moz=
/gecko/
.test(Browser.userAgent);
if
(Browser.ie){
img.onreadystatechange =
function
(){
if
(img.readyState==
"complete"
||img.readyState==
"loaded"
){
document.getElementById(imgid).src=img.src;
}
}
}
else
if
(Browser.Moz){
img.onload=
function
(){
if
(img.complete==
true
){
document.getElementById(imgid).src=img.src;
}
}
}
}
// 缓存数据
function
getItemPicId (currentPage) {
$.ajax({
type:
"post"
,
url:
"../item/common/cacheItemPic.do"
,
data:{
"currentPage"
:currentPage},
dataType:
"json"
,
error:
function
(){
},
success:
function
(data){
cacheItemPic(data.rows);
total = data.total;
}
});
}
// 保存到本地
function
cacheItemPic(data) {
for
(
var
i=0; i < data.length; i++) {
var
src =
""
var
imageId = data[i].ST_PIC_ID;
if
(data[i].NM_SORT ==
"1"
) {
src =
"../item/common/simpleImage.do?picId="
+imageId;
cacheImg (imageId, src);
}
src =
"../item/common/simpleImage.do?type=b&picId="
+imageId;
imageId = (imageId+
"blimg"
);
cacheImg (imageId, src);
}
function
cacheImg (imgId, imgSrc) {
try
{
var
readWriteMode =
typeof
IDBTransaction.READ_WRITE ==
"undefined"
?
"readwrite"
: IDBTransaction.READ_WRITE;
var
transaction = db.transaction([
"PicData"
], readWriteMode);
var
objectStore = transaction.objectStore(
"PicData"
);
var
request = objectStore.get(imgId);
request.onsuccess =
function
(event) {
var
data = event.target.result;
if
(data ==
null
) {
// Create XHR
var
xhr =
new
XMLHttpRequest(),
blob;
xhr.open(
"GET"
, imgSrc,
true
);
// Set the responseType to blob
xhr.responseType =
"blob"
;
xhr.addEventListener(
"load"
,
function
() {
if
(xhr.status === 200) {
// Blob as response
blob = xhr.response;
var
imgFile = blob;
// Save data in indexDB
var
picData = {};
picData.id = imgId;
picData.blob = blob;
saveInIndexDB(picData);
}
},
false
);
// Send XHR
xhr.send();
}
else
{
console.log(
"Got image !"
);
objectStore.
delete
(imgId);
console.log(
"delete data!"
);
// Create XHR
var
xhr =
new
XMLHttpRequest(),
blob;
xhr.open(
"GET"
, imgSrc,
true
);
// Set the responseType to blob
xhr.responseType =
"blob"
;
xhr.addEventListener(
"load"
,
function
() {
if
(xhr.status === 200) {
// Blob as response
blob = xhr.response;
var
imgFile = blob;
// Save data in indexDB
var
picData = {};
picData.id = imgId;
picData.blob = blob;
saveInIndexDB(picData);
}
},
false
);
// Send XHR
xhr.send();
}
}
}
catch
(e) {
console.log(
"cache image error!"
);
}
}
}