/*! * mobileselect.js * (c) 2017-present onlyhom * released under the mit license. */ (function(){function getclass(dom,string){return dom.getelementsbyclassname(string)}function mobileselect(config){this.mobileselect;this.wheelsdata=config.wheels;this.jsontype=false;this.cascadejsondata=[];this.displayjson=[];this.curvalue=null;this.curindexarr=[];this.cascade=false;this.starty;this.moveendy;this.movey;this.oldmovey;this.offset=0;this.offsetsum=0;this.oversizeborder;this.curdistance=[];this.clickstatus=false;this.ispc=true;this.init(config)}mobileselect.prototype={constructor:mobileselect,init:function(config){var _this=this;_this.keymap=config.keymap?config.keymap:{id:"id",value:"value",childs:"childs"};_this.checkdatatype();_this.renderwheels(_this.wheelsdata,config.cancelbtntext,config.ensurebtntext);_this.trigger=document.queryselector(config.trigger);if(!_this.trigger){console.error("mobileselect has been successfully installed, but no trigger found on your page.");return false}_this.wheel=getclass(_this.mobileselect,"wheel");_this.slider=getclass(_this.mobileselect,"selectcontainer");_this.wheels=_this.mobileselect.queryselector(".wheels");_this.liheight=_this.mobileselect.queryselector("li").offsetheight;_this.ensurebtn=_this.mobileselect.queryselector(".ensure");_this.cancelbtn=_this.mobileselect.queryselector(".cancel");_this.graylayer=_this.mobileselect.queryselector(".graylayer");_this.popup=_this.mobileselect.queryselector(".content");_this.callback=config.callback||function(){};_this.transitionend=config.transitionend||function(){};_this.onshow=config.onshow||function(){};_this.onhide=config.onhide||function(){};_this.initposition=config.position||[];_this.titletext=config.title||"";_this.connector=config.connector||" ";_this.triggerdisplaydata=!(typeof(config.triggerdisplaydata)=="undefined")?config.triggerdisplaydata:true;_this.trigger.style.cursor="pointer";_this.setstyle(config);_this.settitle(_this.titletext);_this.checkispc();_this.checkcascade();_this.addlistenerall();if(_this.cascade){_this.initcascade()}if(_this.initposition.length<_this.slider.length){var diff=_this.slider.length-_this.initposition.length;for(var i=0;i'+'
'+'
'+'
'+'
'+canceltext+"
"+'
'+'
'+ensuretext+"
"+"
"+"
"+'
'+'
'+'
'+"
"+'
'+'
'+"
"+"
"+"
";document.body.appendchild(_this.mobileselect);var temphtml="";for(var i=0;i"}_this.mobileselect.queryselector(".wheels").innerhtml=temphtml},addlistenerall:function(){var _this=this;for(var i=0;i<_this.slider.length;i++){(function(i){_this.addlistenerwheel(_this.wheel[i],i)})(i)}},addlistenerwheel:function(thewheel,index){var _this=this;thewheel.addeventlistener("touchstart",function(){_this.touch(event,this.firstchild,index)},false);thewheel.addeventlistener("touchend",function(){_this.touch(event,this.firstchild,index)},false);thewheel.addeventlistener("touchmove",function(){_this.touch(event,this.firstchild,index)},false);if(_this.ispc){thewheel.addeventlistener("mousedown",function(){_this.dragclick(event,this.firstchild,index)},false);thewheel.addeventlistener("mousemove",function(){_this.dragclick(event,this.firstchild,index)},false);thewheel.addeventlistener("mouseup",function(){_this.dragclick(event,this.firstchild,index)},true)}},checkdatatype:function(){var _this=this;if(typeof(_this.wheelsdata[0].data[0])=="object"){_this.jsontype=true}},checkcascade:function(){var _this=this;if(_this.jsontype){var node=_this.wheelsdata[0].data;for(var i=0;i0){_this.cascade=true;_this.cascadejsondata=_this.wheelsdata[0].data;break}}}else{_this.cascade=false}},generatearrdata:function(targetarr){var temparr=[];var keymap_id=this.keymap.id;var keymap_value=this.keymap.value;for(var i=0;i0){_this.initdeepcount=0;_this.initcheckarrdeep(_this.cascadejsondata[_this.initposition[0]])}else{_this.checkarrdeep(_this.cascadejsondata[0])}_this.rerenderwheels()},initcheckarrdeep:function(parent){var _this=this;if(parent){if(_this.keymap.childs in parent&&parent[_this.keymap.childs].length>0){_this.displayjson.push(_this.generatearrdata(parent[_this.keymap.childs]));_this.initdeepcount++;var nextnode=parent[_this.keymap.childs][_this.initposition[_this.initdeepcount]];if(nextnode){_this.initcheckarrdeep(nextnode)}else{_this.checkarrdeep(parent[_this.keymap.childs][0])}}}},checkarrdeep:function(parent){var _this=this;if(parent){if(_this.keymap.childs in parent&&parent[_this.keymap.childs].length>0){_this.displayjson.push(_this.generatearrdata(parent[_this.keymap.childs]));_this.checkarrdeep(parent[_this.keymap.childs][0])}}},checkrange:function(index,posindexarr){var _this=this;var deletenum=_this.displayjson.length-1-index;for(var i=0;iposindexarr.length){tempcount=_this.slider.length-posindexarr.length;for(var i=0;i_this.displayjson.length){var count=_this.wheel.length-_this.displayjson.length;for(var i=0;i'+_this.displayjson[i][j][_this.keymap.value]+""}_this.slider[i].innerhtml=temphtml}else{var tempwheel=document.createelement("div");tempwheel.classname="wheel";temphtml='
    ';for(var j=0;j<_this.displayjson[i].length;j++){temphtml+='
  • '+_this.displayjson[i][j][_this.keymap.value]+"
  • "}temphtml+="
";tempwheel.innerhtml=temphtml;_this.addlistenerwheel(tempwheel,i);_this.wheels.appendchild(tempwheel)}})(i)}},updatewheels:function(data){var _this=this;if(_this.cascade){_this.cascadejsondata=data;_this.displayjson=[];_this.initcascade();if(_this.initposition.length<_this.slider.length){var diff=_this.slider.length-_this.initposition.length;for(var i=0;i'+data[j][_this.keymap.value]+""}_this.wheelsdata[sliderindex]={data:data}}else{for(var j=0;j"+data[j]+""}_this.wheelsdata[sliderindex]=data}}_this.slider[sliderindex].innerhtml=temphtml},fixrowstyle:function(){var _this=this;var width=(100/_this.wheel.length).tofixed(2);for(var i=0;i<_this.wheel.length;i++){_this.wheel[i].style.width=width+"%"}},getindex:function(distance){return math.round((2*this.liheight-distance)/this.liheight)},getindexarr:function(){var _this=this;var temp=[];for(var i=0;i<_this.curdistance.length;i++){temp.push(_this.getindex(_this.curdistance[i]))}return temp},getcurvalue:function(){var _this=this;var temp=[];var positionarr=_this.getindexarr();if(_this.cascade){for(var i=0;i<_this.wheel.length;i++){temp.push(_this.displayjson[i][positionarr[i]])}}else{if(_this.jsontype){for(var i=0;i<_this.curdistance.length;i++){temp.push(_this.wheelsdata[i].data[_this.getindex(_this.curdistance[i])])}}else{for(var i=0;i<_this.curdistance.length;i++){temp.push(_this.getinnerhtml(i))}}}return temp},getvalue:function(){return this.curvalue},calcdistance:function(index){return 2*this.liheight-index*this.liheight},setcurdistance:function(indexarr){var _this=this;var temp=[];for(var i=0;i<_this.slider.length;i++){temp.push(_this.calcdistance(indexarr[i]));_this.moveposition(_this.slider[i],temp[i])}_this.curdistance=temp},fixposition:function(distance){return -(this.getindex(distance)-2)*this.liheight},moveposition:function(theslider,distance){theslider.style.webkittransform="translate3d(0,"+distance+"px, 0)";theslider.style.transform="translate3d(0,"+distance+"px, 0)"},locateposition:function(index,posindex){var _this=this;this.curdistance[index]=this.calcdistance(posindex);this.moveposition(this.slider[index],this.curdistance[index]);if(_this.cascade){_this.checkrange(index,_this.getindexarr())}},updatecurdistance:function(theslider,index){if(theslider.style.transform){this.curdistance[index]=parseint(theslider.style.transform.split(",")[1])}else{this.curdistance[index]=parseint(theslider.style.webkittransform.split(",")[1])}},getdistance:function(theslider){if(theslider.style.transform){return parseint(theslider.style.transform.split(",")[1])}else{return parseint(theslider.style.webkittransform.split(",")[1])}},getinnerhtml:function(sliderindex){var _this=this;var index=_this.getindex(_this.curdistance[sliderindex]);return _this.slider[sliderindex].getelementsbytagname("li")[index].innerhtml},touch:function(event,theslider,index){var _this=this;event=event||window.event;switch(event.type){case"touchstart":_this.starty=event.touches[0].clienty;_this.starty=parseint(_this.starty);_this.oldmovey=_this.starty;break;case"touchend":_this.moveendy=parseint(event.changedtouches[0].clienty);_this.offsetsum=_this.moveendy-_this.starty;_this.oversizeborder=-(theslider.getelementsbytagname("li").length-3)*_this.liheight;if(_this.offsetsum==0){var clickoffetnum=parseint((document.documentelement.clientheight-_this.moveendy)/40);if(clickoffetnum!=2){var offset=clickoffetnum-2;var newdistance=_this.curdistance[index]+(offset*_this.liheight);if((newdistance<=2*_this.liheight)&&(newdistance>=_this.oversizeborder)){_this.curdistance[index]=newdistance;_this.moveposition(theslider,_this.curdistance[index]);_this.transitionend(_this.getindexarr(),_this.getcurvalue())}}}else{_this.updatecurdistance(theslider,index);_this.curdistance[index]=_this.fixposition(_this.curdistance[index]);_this.moveposition(theslider,_this.curdistance[index]);if(_this.curdistance[index]+_this.offsetsum>2*_this.liheight){_this.curdistance[index]=2*_this.liheight;settimeout(function(){_this.moveposition(theslider,_this.curdistance[index])},100)}else{if(_this.curdistance[index]+_this.offsetsum<_this.oversizeborder){_this.curdistance[index]=_this.oversizeborder; settimeout(function(){_this.moveposition(theslider,_this.curdistance[index])},100)}}_this.transitionend(_this.getindexarr(),_this.getcurvalue())}if(_this.cascade){_this.checkrange(index,_this.getindexarr())}break;case"touchmove":event.preventdefault();_this.movey=event.touches[0].clienty;_this.offset=_this.movey-_this.oldmovey;_this.updatecurdistance(theslider,index);_this.curdistance[index]=_this.curdistance[index]+_this.offset;_this.moveposition(theslider,_this.curdistance[index]);_this.oldmovey=_this.movey;break}},dragclick:function(event,theslider,index){var _this=this;event=event||window.event;switch(event.type){case"mousedown":_this.starty=event.clienty;_this.oldmovey=_this.starty;_this.clickstatus=true;break;case"mouseup":_this.moveendy=event.clienty;_this.offsetsum=_this.moveendy-_this.starty;_this.oversizeborder=-(theslider.getelementsbytagname("li").length-3)*_this.liheight;if(_this.offsetsum==0){var clickoffetnum=parseint((document.documentelement.clientheight-_this.moveendy)/40);if(clickoffetnum!=2){var offset=clickoffetnum-2;var newdistance=_this.curdistance[index]+(offset*_this.liheight);if((newdistance<=2*_this.liheight)&&(newdistance>=_this.oversizeborder)){_this.curdistance[index]=newdistance;_this.moveposition(theslider,_this.curdistance[index]);_this.transitionend(_this.getindexarr(),_this.getcurvalue())}}}else{_this.updatecurdistance(theslider,index);_this.curdistance[index]=_this.fixposition(_this.curdistance[index]);_this.moveposition(theslider,_this.curdistance[index]);if(_this.curdistance[index]+_this.offsetsum>2*_this.liheight){_this.curdistance[index]=2*_this.liheight;settimeout(function(){_this.moveposition(theslider,_this.curdistance[index])},100)}else{if(_this.curdistance[index]+_this.offsetsum<_this.oversizeborder){_this.curdistance[index]=_this.oversizeborder;settimeout(function(){_this.moveposition(theslider,_this.curdistance[index])},100)}}_this.transitionend(_this.getindexarr(),_this.getcurvalue())}_this.clickstatus=false;if(_this.cascade){_this.checkrange(index,_this.getindexarr())}break;case"mousemove":event.preventdefault();if(_this.clickstatus){_this.movey=event.clienty;_this.offset=_this.movey-_this.oldmovey;_this.updatecurdistance(theslider,index);_this.curdistance[index]=_this.curdistance[index]+_this.offset;_this.moveposition(theslider,_this.curdistance[index]);_this.oldmovey=_this.movey}break}}};if(typeof exports=="object"){module.exports=mobileselect}else{if(typeof define=="function"&&define.amd){define([],function(){return mobileselect})}else{window.mobileselect=mobileselect}}})();