在好例子网,分享、交流、成长!
您当前所在位置:首页js 开发实例高级JavaScript组件 → 仿移动端手势滑动插件

仿移动端手势滑动插件

高级JavaScript组件

下载此实例
  • 开发语言:js
  • 实例大小:5.11KB
  • 下载次数:26
  • 浏览次数:334
  • 发布时间:2016-12-09
  • 实例类别:高级JavaScript组件
  • 发 布 人:feifielv
  • 文件格式:.js
  • 所需积分:2
 相关标签: 滑动 插件 手势 移动

实例介绍

【实例简介】
【实例截图】

【核心代码】

//手势滑动
(function($) {
	$.fn.move = function(setti) {
		var defaultSetti = {
			width: 200, //实际显示区域
			height: 200, //实际显示区域
			x: true, // 横向移动
			y: true, //纵向移动
		}
		setti = $.extend(true, {}, defaultSetti, setti);
		return this.each(function() {
			var _this = $(this),
				s = setti;
			var chil = $(".Slide", _this); //触控元素
			var startX = 0,
				startY = 0; //触摸开始时手势横纵坐标 
			var temPos = []; //元素当前位置
			var oPosition = {}; //触点位置
			var wh = []; //元素宽高
			var z = 0; //手指滑动时间
			var d = {}; //总过滑动距离
			var m = 0; //每毫秒滚动距离
			//页面加载或发生改变
			$(window).bind('resize load', function() {
				b();
				wh.w = chil.width();
				wh.h = chil.height();
				if(wh.w < s.width) {
					s.width = wh.w
				}
				if(wh.h < s.height) {
					s.height = wh.h
				}
			});
			if(_this.css("position") == "static") { //检测是否定位
				_this.css("position", "relative")
			}
			//获取滑动时间
			function autoMo() {
				z  ;
			}
			//停止计算
			function b() { //绑定三个事件
				chil.get(0).addEventListener("touchstart", c, false)
				chil.get(0).addEventListener('touchmove', y, false);
				chil.get(0).addEventListener('touchend', t, false);
			}

			function h(e) { //获取触摸点
				var touches = e.changedTouches,
					l = touches.length,
					touch, tagX, tagY;
				for(var i = 0; i < l; i  ) {
					touch = touches[i];
					tagX = touch.clientX;
					tagY = touch.clientY;
				}
				oPosition.x = tagX;
				oPosition.y = tagY;
				if(!z) {
					d.x = tagX;
					d.y = tagY;
				}
			}

			function c(e) { //触摸开始
				h(e);
				startX = oPosition.x;
				startY = oPosition.y;
				temPos.x = chil.position(_this).left;
				temPos.y = chil.position(_this).top;
				animate(chil,0);
			}

			function y(e) { //触摸移动
				e.preventDefault();
				h(e);
				autoMo();
				var moveX = oPosition.x - startX;
				var moveY = oPosition.y - startY;
				if(s.x) {
					chil.css({
						left: temPos.x   moveX
					});
				}
				if(s.y) {
					chil.css({
						top: temPos.y   moveY
					});
				}
			}
			function t(e) { //触摸结束
				temPos.x = chil.position().left;
				temPos.y = chil.position().top;
				if(s.x) {
					var wwl = (d.x - oPosition.x) / z*20;
					_left(chil,wwl);
				}
				if(s.y) {
						var wwt = (d.y - oPosition.y) / z*20;
						_top(chil,wwt);
				}
				z = 0; //初始化触控时间
			}
			function animate(obj, num) {
				clearInterval(obj.timer);
				clearInterval(obj.timers);
				if(!num){
					return;
				}
			}
			function _top(obj,num){
				clearInterval(obj.timer);
				if(!num){
					return;
				}
				var ti=0;
				if(num>0){
					obj.timer = setInterval(function() {
						var flag = true; //清楚定时器的标识
						var step = num / 20;
						step = step > 0 ? Math.ceil(step) : Math.floor(step);
						obj.css("top",temPos.y - step - ti);
						ti=ti step;
						num=num-step;
						if(num<0 || -temPos.y   step   ti > wh.h - s.height){
							clearInterval(obj.timer);
						}
						if(-temPos.y - step - ti > wh.h - s.height){
							doAnimt(-wh.h   s.height)
						}
					}, 10)
				}else{
					obj.timer = setInterval(function() {
						var step = num / 20;
						step = step > 0 ? Math.ceil(step) : Math.floor(step);
						obj.css("top",temPos.y - step - ti);
						ti=ti step;
						num=num-step;
						if(num>0 || temPos.y - step - ti > 0){
							clearInterval(obj.timer);
						}
						if(temPos.y - step - ti > 0){
							doAnimt(0)
						}
					}, 10)
				}
			}
			function _left(obj,num){
				clearInterval(obj.timers);
				if(!num){
					return;
				}
				var til=0;
				if(num>0){
					obj.timers = setInterval(function() {
						var stepl = num / 20;
						stepl = stepl > 0 ? Math.ceil(stepl) : Math.floor(stepl);
						obj.css("left",temPos.x - stepl - til);
						til=til stepl;
						num=num-stepl;
						if(num<0 || -temPos.x   stepl   til > wh.w - s.width){
							clearInterval(obj.timers);
						}
						if(-temPos.x - stepl - til > wh.w - s.width){
							doAniml(-wh.w   s.width)
						}
					}, 10)
				}else{
					
					obj.timers = setInterval(function() {console.log(num);
						var stepl = num / 20;
						stepl = stepl > 0 ? Math.ceil(stepl) : Math.floor(stepl);
						obj.css("left",temPos.x - stepl - til);
						til=til stepl;
						num=num-stepl;
						if(num>0 || temPos.x - stepl - til > 0){
							clearInterval(obj.timers);
						}
						if(temPos.x - stepl - til > 0){
							doAniml(0)
						}
						console.log(num);
					}, 10)
				}
			}
			function doAnimt(iTarget) {
				chil.animate({
					top: iTarget
				}, {
					duration: 300,
					queue: false
				});
			}
			function doAniml(iTarget) {
				chil.animate({
					left: iTarget
				}, {
					duration: 300,
					queue: false
				});
			}
			try {
				if(typeof(eval(_data)) == "function") {
					_data(); //可用于传输内部数据
				}
			} catch(e) {}
		});
	}
})(jQuery);

实例下载地址

仿移动端手势滑动插件

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警