移动端原声js + css3实现下拉刷新

1、引入 jquery.js 和 nativePull.js 文件

<script src="js/jquery-1.8.3.min.js"></script>
<script src="js/nativePull.js"></script>

2、加载下拉刷新Dom引擎HTML代码块

<!-- beginDown -->
<div class="pull_down" style="border:none;height: 100%;overflow: auto;">
<div class="loadinges" style="border: 0px #CCC solid;height: 3em;line-height: 3em;text-align: center;">
	下拉刷新数据
</div>
	具体需要手势下拉HTML代码块
<!-- endDown -->
</div>

3、初始化下拉

<script type="text/javascript">
//滚动加载,下拉
slide_({
 	container: ".pull_down",
 	next: function(e) {
 		// 初始化部分 标识数据
 		pullDown = "1";
 		var that = this;
 		//ajax请求数据,数据返回后隐藏加载中提示
 		setTimeout(function() {
 			that.back.call();
 			$(".loadinges").html("刷新成功!");
 		},1500);
 	}
});
</script>

测试demo 复制即可》》

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
		<title>CSS3 + HTML5 下拉刷新</title>
		<script src="js/jquery-1.8.3.min.js"></script>
		<script src="js/nativePull.js"></script>
	</head>
	<style>
		html {
			height: 100%;
			overflow: hidden;
		}
		body {
			height: 100%;
			margin: 0;
		}
		#base {
			height: 3rem;
			line-height: 3rem;
			background-color: #CCC;
			color: white;
			font-size: 1.2em;
			padding-left: 20px;
			border-bottom: 1px white solid;
		}
	</style>
	<body>
		<!-- beginDown -->
		<div class="pull_down" style="border:none;height: 100%;overflow: auto;">
		<div class="loadinges" style="border: 0px #CCC solid;height: 3em;line-height: 3em;text-align: center;">
			下拉刷新数据
		</div>
			
		<div id="base">Borther-Cola</div><div id="base">Borther-Cola</div><div id="base">Borther-Cola</div><div id="base">Borther-Cola</div>
		
		<!-- endDown -->
			</div>
			<script type="text/javascript">
				//滚动加载,下拉
				slide_({
				 	container: ".pull_down",
				 	next: function(e) {
				 		// 初始化部分 标识数据
				 		pullDown = "1";
				 		var that = this;
				 		//ajax请求数据,数据返回后隐藏加载中提示
				 		setTimeout(function() {
				 			that.back.call();
				 			$(".loadinges").html("刷新成功!");
				 		},1500);
				 	}
				});
			</script>
	</body>
</html>

nativePull.js 复制》》

 var isPageCando = 0; //定义手机是否在屏幕滑动 0:无滑动
 var slide_ = function(option) {
 	var defaults = {
 		container: '',
 		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.container);
 	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, 'touchmove', move); //当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。
   	fn.addEvent(obj, 'touchstart', start); //当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发
   	fn.addEvent(obj, 'touchend', end); //当手指从屏幕上离开的时候触发
// 	fn.addEvent(obj, 'mousedown', start) //,隐藏或显示元素:
 	fn.addEvent(obj, 'mousemove', move) //获得鼠标指针在页面中的位置
   	fn.addEvent(obj, 'mouseup', end) //隐藏或显示元素:

 	//滑动开始
 	function start(e) {
 		//当前滚动条距离顶部的距离:$(".pull_down").scrollTop()
   		if($(".pull_down").scrollTop() <= 0 && !isLock) {
 			//标识操作进行中
   			isLock = true;
   			isCanDo = true;
 			var even = typeof event == "undefined" ? e : event;
 			//保存当前鼠标Y坐标
 			start = hasTouch ? even.touches[0].pageY : even.pageY;
 			//消除滑块动画时间
 			fn.setTransition(0);
 			loading.innerHTML = '下拉刷新数据';
   		}
   		return false;
 	}

 	//滑动中
 	function move(e) {
		if(objparent.scrollTop <= 0 && isCanDo) {
	 		isPageCando++;
			var even = typeof event == "undefined" ? e : event;
			if(isLock) {
	   			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) {
   			if(isPageCando > 0) {
   				//判断滑动距离大小
	   			if(end - start >= offset) {
	   				//设置滑块回弹时间
	   				fn.setTransition(1);
	   				//保留提示部分
	   				fn.translate(1);
	   				loading.innerHTML = '正在刷新数据...';
	   				if(typeof option.next == "function") {
	   					option.next.call(fn, e);
	   				}
	   			} else {
	   				//返回初始状态
	   				fn.back();
	   			}
	   			
   			}else {
   				fn.back();
   			}
   			
   			isPageCando = 0;
   			isCanDo = false;
			
   		}
 	}
 }

浏览器切换到 Mobile 模式
转载其他网址,解决滚动条在顶部 点击触发下拉的bug
只为能帮助到使用到得你。。。

QQ群:595377655。问题总是能出现并着手解决的地方,欢迎加入。

http://www.mescroll.com/

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值