var moreAsync = {
//読み込み先エレメント
el:$('#more_loadarea'),
dataObj:[],
//data
data:{
loadNum:20, //デフォルト 表示数
fadeSpeed:500,
loadText:'読み込み中',
btnText:'More',
dataFile:'', //読み込みデータ
requestShop:'', //店舗
asyncData:{
mode:'fetch'
}, //デフォルト post mode
},
//読み込みデータ
setDataFile:function(file_path){
'use strict';
var $this = this;
$this.data.dataFile = file_path;
return this;
},
//データファイルのセット
setLoadNum:function(num){
'use strict';
var $this = this;
$this.data.loadNum = num;
return this;
},
//post dataのセット
setAsyncData:function(data){
'use strict';
var $this = this;
$this.data.asyncData = data;
return this;
},
// リクエストショップのセット
setRequestShop:function(){
'use strict';
//GETパラメーター取得
var $this = this;
var url = location.href;
var params = url.split("?");
if(params.length === 2){
var spparams = params[1].split("&");
var paramObj = {};
for(var i = 0; i < spparams.length; i++){
var keys = spparams[i].split("=");
paramObj[keys[0]] = keys[1];
}
//getにshopがあれば
if(paramObj.shop !== undefined){
$this.data.asyncData.shop = paramObj.shop;
}
}
return this;
},
//ここの部分はインスタンス化時にオーバーライドしてください
setHtml:function(i){
var template = ''
+ '';
$(template).appendTo($this.el).css({opacity:'0'}).animate({opacity:'1'},$this.data.fadeSpeed);
},
//データ取得
setDataObj:function(){
$this = this;
return new Promise(function(resolve,reject){
$.getJSON($this.data.dataFile,$this.data.asyncData,function(res){
$this.dataObj = res;
resolve(res);
})
.fail(function(error){
//console.log('null')
//reject();
});
})
},
//init
init:function(){
'use strict';
var $this = this;
this.setDataObj().then(function(){
$this.el.after('' + $this.data.btnText + '
');
var setMore = $this.el.next('.btnMore');
setMore.click(function(){
var dataLengh = $this.dataObj.length,
done_view = false,
loadItemLength = $this.el.find('.loadItem').length,
setAdj = (dataLengh)-(loadItemLength),
setBeg = (dataLengh)-(setAdj);
if(!(dataLengh == loadItemLength)){
$this.el.append('' + $this.data.loadText + '
');
if(loadItemLength == 0){
if(dataLengh <= $this.data.loadNum){
for (var i=0; i' + data[i].itemSource + '').appendTo($this.el).css({opacity:'0'}).animate({opacity:'1'},$this.data.fadeSpeed);
}
done_view = true;
setMore.remove();
} else {
for (var i=0; i<$this.data.loadNum; i++) {
$this.setHtml(i);
//$('' + data[i].itemSource + '
').appendTo($this.el).css({opacity:'0'}).animate({opacity:'1'},$this.data.fadeSpeed);
}
done_view = true;
}
} else if(loadItemLength > 0 && loadItemLength < dataLengh){
if($this.data.loadNum < setAdj){
for (var i=0; i<$this.data.loadNum; i++) {
var v = i+setBeg;
$this.setHtml(v);
//$('' + data[v].itemSource + '
').appendTo($this.el).css({opacity:'0'}).animate({opacity:'1'},$this.data.fadeSpeed);
}
done_view = true;
} else if($this.data.loadNum >= setAdj){
for (var i=0; i' + data[v].itemSource + '').appendTo($this.el).css({opacity:'0'}).animate({opacity:'1'},$this.data.fadeSpeed);
}
done_view = true;
setMore.remove();
}
} else if(loadItemLength == dataLengh){
return false;
}
} else {
return false;
}
if(done_view){
$('#nowLoading').each(function(){
$(this).remove();
});
}
});
});
},
}