gistfile1.txt //------------------------------------下拉刷新实现代码----------------------------------------------------////下拉刷新以及无线加载,在app中特别常见,实现思路在于,下拉的时候触发事件发送
//------------------------------------下拉刷新实现代码----------------------------------------------------// //下拉刷新以及无线加载,在app中特别常见,实现思路在于,下拉的时候触发事件发送ajax请求,带一个当前页码数 //服务端给你返回相应的数据 //本代码主要演示了下拉触发的事件(其实下拉刷新可以看做是触发一个事件从而发送请求返回数据!) //思路:每下拉一次向服务端发送一次请求,下拉的时候出现加载动画,当数据请求成功的时候关闭加载动画 var slide = function (option) { var defaults={ wrapper:'', next:function(){} } var start, end, length, isLock = false,//是否锁定整个操作 isCanDo = false,//是否移动滑块 isTouchPad = (/hp-tablet/gi).test(navigator.appVersion), hasTouch = 'ontouchstart' in window && !isTouchPad; var obj = document.querySelector(option.wrapper); var loading=obj.firstElementChild; var offset=loading.clientHeight; var objparent = obj.parentElement; /*操作方法*/ var fn = { //移动容器 translate: function (diff) { obj.style.webkitTransform='translate3d(0,'+diff+'px,0)'; obj.style.transform='translate3d(0,'+diff+'px,0)'; }, //设置效果时间 setTransition: function (time) { obj.style.webkitTransition='all '+time+'s'; obj.style.transition='all '+time+'s'; }, //返回到初始位置 back: function () { fn.translate(0 - offset); //标识操作完成 isLock = false; }, addEvent:function(element,event_name,event_fn){ if (element.addEventListener) { element.addEventListener(event_name, event_fn, false); } else if (element.attachEvent) { element.attachEvent('on' + event_name, event_fn); } else { element['on' + event_name] = event_fn; } } }; fn.translate(0-offset); fn.addEvent(obj,'touchstart',start);//滑动开始 fn.addEvent(obj,'touchmove',move);//滑动中 fn.addEvent(obj,'touchend',end);//滑动结束 fn.addEvent(obj,'mousedown',start)//鼠标按下 fn.addEvent(obj,'mousemove',move)//鼠标移动 fn.addEvent(obj,'mouseup',end)//鼠标离开 //滑动开始 function start(e) { if (objparent.scrollTop <= 0 && !isLock) { var even = typeof event == "undefined" ? e : event; //标识操作进行中 isLock = true; isCanDo = true; //保存当前鼠标Y坐标 start = hasTouch ? even.touches[0].pageY : even.pageY; //消除滑块动画时间 fn.setTransition(0); loading.innerHTML='正在加载'; } return false; } //滑动中 function move(e) { if (objparent.scrollTop <= 0 && isCanDo) { var even = typeof event == "undefined" ? e : event; //保存当前鼠标Y坐标 end = hasTouch ? even.touches[0].pageY : even.pageY; if (start < end) { even.preventDefault(); //消除滑块动画时间 fn.setTransition(0); //移动滑块 if((end-start-offset)/2<=150) { length=(end - start - offset) / 2; fn.translate(length); } else { length+=0.3; fn.translate(length); } } } } //滑动结束 function end(e) { if (isCanDo) { isCanDo = false; //判断滑动距离是否大于等于指定值 if (end - start >= offset) { //设置滑块回弹时间 fn.setTransition(1); //保留提示部分 fn.translate(0); //执行回调函数 loading.innerHTML='正在加载'; if (typeof option.next == "function") { option.next.call(fn, e); } } else { //返回初始状态 fn.back(); } } } } //调用函数 var href = window.location.pathname var index = href .lastIndexOf("\/"); href = href .substring(index + 1, href .length-5); if(href=='page'){ pag = 2 }else if($('.aa').length==0){ pag = Number(href) $('.bb').html('亲已经没有再多了') $('.cc').show() }else{ pag = Number(href)+1 } slide({wrapper:"#wrapper",next: function (e) { //松手之后执行逻辑,ajax请求数据,数据返回后隐藏加载中提示 var that = this; setTimeout(function () { window.location='http://agent.jxqp.me/index.php/Mobile/Demo/page/p/'+pag+'.html' document.querySelector('.loading').innerHTML=''; //这里面写ajax请求 that.back.call(); }, 2000); }});