/** * 居于touch.js下屏幕滚动操作的 */ (function ($) { function rockclass(element, options){ var me = this; var opts = $.extend({ ondragstart:function(){}, ondrag:function(){}, ondragrlend:function(){}, ondragrl:function(){}, scrollbool:false, dropdown_bgcolor:'#f1f1f1', //下拉背景色 dropdown_success:function(){} //下拉回调 }, options); var obj = element; this._init=function(){ this.rand = js.getrand(); this.reloadbo = false; this.mobj = $(obj); for(var a in opts)this[a]=opts[a]; touch.on(obj, 'dragstart', function(e){ me._dragstart(e); }); touch.on(obj, 'drag', function(e){ e.preventDefault() me._drag(e); }); touch.on(obj, 'dragend', function(e){ me._dragend(e); }); }; this._dragstart=function(e){ if(this.reloadbo)return; this.startarr = [e.distanceX, e.distanceY, this.mobj.scrollTop(), e.timeStamp]; this.mobj.stop(); this.ondragstart(e); }; this._drag=function(e){ if(this.reloadbo)return; var lx = e.direction; if(lx=='right' || lx=='left'){ this._dragrightleft(e) return; } this.upheight = 0; if(this.scrollbool){ clearTimeout(this._hidescrollstime); var hei = e.distanceY-this.startarr[1]; var lef = this.startarr[2]-hei; if(lef<0)lef=0; this.mobj.scrollTop(lef); if(lef==0 && hei>0 && this.startarr[2]==0)this._upstart(hei,e);//继续下拉刷新 } this.ondrag(e); }; this._dragrightleft=function(e){ var yd = e.distanceX-this.startarr[0]; this.ondragrl(yd,e); }; this._upstart=function(hei){ if(this.reloadbo)return; hei = hei*0.5; this.upheight = hei; if(hei>200)return; var sid = 'updowns_'+this.rand+''; $('#'+sid+'').remove(); var tx= '↓ 下拉刷新'; if(hei>50)tx='↑ 释放立即刷新'; var s = '
'+tx+'
'; this.mobj.before(s); }; this._dragend=function(e){ var lx = e.direction; var jg,hei,heis,hms,jgs,ass; jg = e.timeStamp-this.startarr[3]; if(lx=='right' || lx=='left'){ this._dragrightleftend(e); return; } hei = e.distanceY-this.startarr[1]; heis= hei >0 ? -1 : 1; hms = 200; jgs = (hms-jg)/0.2 * heis; if(jg50){ this.reloadbo = true; o1.animate({'height':'50px'},200,function(){ o1.html(' 刷新中...'); me.dropdown_success(e); }); }else{ $('#'+sid+'').slideUp(200); } } }; this._dragrightleftend=function(e){ var yd = e.distanceX-this.startarr[0]; this.ondragrlend(yd,e); }; this.dropdown_ok=function(ts){ this.reloadbo = false; var o1 = $('#updowns_'+this.rand+''); if(!ts)ts='√ 刷新成功'; o1.html(ts); setTimeout(function(){o1.slideUp(200,function(){o1.remove();});}, 500); }; this.scroll = function(){ this.scrollbool = true; this.mobj.css('overflow','hidden'); var off = this.mobj.offset(); this.scrollsid = 'scrolllists_'+this.rand+''; var l = off.left+this.mobj.width()-6; var s = ''; s='
'+s+'
'; $('body').append(s); this.resize(); this.mobj.scroll(function(){ me._scrollov(); }); this.mobj.resize(function(){ me.resize(); }); }; this._hidescrolls = function(){ clearTimeout(this._hidescrollstime); this._hidescrollstime = setTimeout(function(){ $('#'+me.scrollsid+'').fadeOut(); },1000); }; this._scrollov=function(){ var top,zh,bl,mh,off,lets; top = this.mobj.scrollTop(); off = this.mobj.offset(); lets= off.top; zh = obj.scrollHeight-obj.clientHeight; mh = obj.clientHeight-80; //可滚动高度 bl = top/zh; var jgt = bl*mh; $('#'+this.scrollsid+'').css('top',''+jgt+'px').show(); this._hidescrolls(); }; this.resize = function(){ var off = this.mobj.offset(); var l = off.left+this.mobj.width()-6,hei = obj.clientHeight; $('#'+this.scrollsid+'_min').css({'left':''+l+'px','top':''+off.top+'px','height':''+hei+'px'}); } }; $.fn.rocktouch = function(lx, options){ var can = $.extend({}, options); var clsa = new rockclass(this[0], can); clsa._init(); clsa[lx](); return clsa; }; })(jQuery);