touchSlider插件案例

<!doctype html>
<html lang="en">
<head>
    <title>jQuery手机图片触屏滑动轮播效果代码</title>
</head>
<style type="text/css">
    *{
        margin: 0;padding: 0;
        list-style: none;
    }
    .main_visual{
        height:500px;
        border-top:1px solid #d7d7d7;
        overflow:hidden;
        position:relative;
    }
    .main_image{
        height:100%;
        overflow:hidden;
        position:relative;
    }
    .main_image ul{
        width:9999px;
        height:100%;
        overflow:hidden;
        position:absolute;
        top:0;
        left:0;
    }
    .main_image li{
        float:left;
        width:100%;
        height:100%;
    }
    .main_image li img{
        display:block;
        width:100%;
        height:100%;
    }
    div.flicking_con{
        position:absolute;
        top:460px;
        left:50%;
        z-index:999;
        width:300px;
        height:21px;
        margin:0 0 0 -50px;
    }
    div.flicking_con a{
        float:left;
        width:21px;
        height:21px;
        background:url(‘./images/btn_main_img.png‘) 0 0 no-repeat;
        display:block;
        text-indent:-1000px;
    }
    div.flicking_con a.on{
        background-position:0 -21px;
    }
    #btn_prev,#btn_next{
        z-index:11111;
        position:absolute;
        display:block;
        width:73px;
        height:74px;
        top:50%;
        margin-top:-37px;
        display:none;
    }
    #btn_prev{
        background:url(./images/hover_left.png) no-repeat left top;
        left:100px;
    }
    #btn_next{
        background:url(./images/hover_right.png) no-repeat right top;
        right:100px;
    }
</style>
<body>
    <div class="main_visual">
        <div class="flicking_con">
            <a href="#">1</a>
            <a href="#">2</a>
            <a href="#">3</a>
            <a href="#">4</a>
            <a href="#">5</a>
        </div>
        <div class="main_image">
            <ul>
                <li><img src="1.jpg"/></li>
                <li><img src="2.jpg"/></li>
                <li><img src="3.jpg"/></li>
                <li><img src="4.jpg"/></li>
                <li><img src="5.jpg"/></li>
            </ul>
            <a href="" id="btn_prev"></a>
            <a href="" id="btn_next"></a>
        </div>
    </div>
<script type="text/javascript" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="jquery.event.drag-1.5.min.js"></script>
<script type="text/javascript" src="jquery.touchSlider.js"></script>
<script type="text/javascript">
    $(document).ready(function(){
        //左右箭头显示与隐藏
        $(".main_visual").hover(function(){
            $("#btn_prev,#btn_next").fadeIn()
        },function(){
            $("#btn_prev,#btn_next").fadeOut()
        });
        $dragBln = false;

        $(".main_image").touchSlider({
            flexible : true,//调用
            speed : 200,//播放速度
            btn_prev : $("#btn_prev"),//左右箭头
            btn_next : $("#btn_next"),
            paging : $(".flicking_con a"),//页面相对应圆圈
            counter : function (e){
                $(".flicking_con a").removeClass("on").eq(e.current-1).addClass("on");
            }
        });

        $(".main_image").bind("mousedown", function() {
            $dragBln = false;
        });

        $(".main_image").bind("dragstart", function() {
            $dragBln = true;
        });

        $(".main_image a").click(function(){
            if($dragBln) {
                return false;
            }
        });

        timer = setInterval(function(){
            $("#btn_next").click();
        }, 1000);

        $(".main_visual").hover(function(){
            clearInterval(timer);
        },function(){
            timer = setInterval(function(){
                $("#btn_next").click();
            },1000);
        });

        $(".main_image").bind("touchstart",function(){
            clearInterval(timer);
        }).bind("touchend", function(){
            timer = setInterval(function(){
                $("#btn_next").click();
            }, 1000);
        });
    });
</script>
</script>
</body>
</html>

  

/**
 * @name	jQuery.touchSlider
 * @version	201209_2
 * @since	201106
 * @param Object	settings	???? ????
 *		roll			-	?? (default true)
 *		flexible		-	?? ???? (default false)
 *		view			-	?? ?? (default 1)
 *		speed			-	????? ?? (default 75)
 *		range			-	?? ?? ?? (default 0.15)
 *		page			-	?? ??? (default 1)
 *		transition		-	CSS3 transition ?? (default false)
 *		btn_prev		-	prev ?? (jQuery Object, default null)
 *		btn_next		-	next ?? (jQuery Object, default null)
 *		paging			-	page ?? (jQuery Object, default null)
 *		initComplete	-	??? ??
 *		counter			-	???? ??, ???
 *
 * @example
	$("#target").touchSlider({
		flexible : true
	});
*/

(function ($) {

	$.fn.touchSlider = function (settings) {

		settings.supportsCssTransitions = (function (style) {
			var prefixes = [‘Webkit‘,‘Moz‘,‘Ms‘];
			for(var i=0, l=prefixes.length; i < l; i++ ) {
				if( typeof style[prefixes[i] + ‘Transition‘] !== ‘undefined‘) {
					return true;
				}
			}
			return false;
		})(document.createElement(‘div‘).style);

		settings = jQuery.extend({
			roll : true,
			flexible : false,
			btn_prev : null,
			btn_next : null,
			paging : null,
			speed : 75,
			view : 1,
			range : 0.15,
			page : 1,
			transition : false,
			initComplete : null,
			counter : null,
			multi : false
		}, settings);

		var opts = [];
		opts = $.extend({}, $.fn.touchSlider.defaults, settings);

		return this.each(function () {

			$.fn.extend(this, touchSlider);

			var _this = this;

			this.opts = opts;
			this._view = this.opts.view;
			this._speed = this.opts.speed;
			this._tg = $(this);
			this._list = this._tg.children().children();
			this._width = parseInt(this._tg.css("width"));
			this._item_w = parseInt(this._list.css("width"));
			this._len = this._list.length;
			this._range = this.opts.range * this._width;
			this._pos = [];
			this._start = [];
			this._startX = 0;
			this._startY = 0;
			this._left = 0;
			this._top = 0;
			this._drag = false;
			this._scroll = false;
			this._btn_prev;
			this._btn_next;

			this.init();

			$(this)
			.bind("touchstart", this.touchstart)
			.bind("touchmove", this.touchmove)
			.bind("touchend", this.touchend)
			.bind("dragstart", this.touchstart)
			.bind("drag", this.touchmove)
			.bind("dragend", this.touchend)

			$(window).bind("orientationchange resize", function () {
				_this.resize(_this);
			});
		});

	};

	var touchSlider = {

		init : function () {
			var _this = this;

			$(this).children().css({
				"width":this._width + "px",
				"overflow":"visible"
			});

			if(this.opts.flexible) this._item_w = this._width / this._view;
			if(this.opts.roll) this._len = Math.ceil(this._len / this._view) * this._view;

			var page_gap = (this.opts.page > 1 && this.opts.page <= this._len) ? (this.opts.page - 1) * this._item_w : 0;

			for(var i=0; i<this._len; ++i) {
				this._pos[i] = this._item_w * i - page_gap;
				this._start[i] = this._pos[i];
				this._list.eq(i).css({
					"float" : "none",
					"display" : "block",
					"position" : "absolute",
					"top" : "0",
					"left" : this._pos[i] + "px",
					"width" : this._item_w + "px"
				});
				if(this.opts.supportsCssTransitions && this.opts.transition) {
					this._list.eq(i).css({
						"-moz-transition" : "0ms",
						"-moz-transform" : "",
						"-ms-transition" : "0ms",
						"-ms-transform" : "",
						"-webkit-transition" : "0ms",
						"-webkit-transform" : "",
						"transition" : "0ms",
						"transform" : ""
					});
				}
			}

			if(this.opts.btn_prev && this.opts.btn_next) {
				this.opts.btn_prev.bind("click", function() {
					_this.animate(1, true);
					return false;
				})
				this.opts.btn_next.bind("click", function() {
					_this.animate(-1, true);
					return false;
				});
			}

			if(this.opts.paging) {
				$(this._list).each(function (i, el) {
					//var btn_page = _this.opts.paging.eq(0).clone();
					var btn_page = _this.opts.paging.eq(i);
					//_this.opts.paging.before(btn_page);

					btn_page.bind("click", function(e) {
						_this.go_page(i, e);
						return false;
					});
				});

				//this.opts.paging.remove();
			}

			this.counter();
			this.initComplete();
		},

		initComplete : function () {
			if(typeof(this.opts.initComplete) == "function") {
				this.opts.initComplete(this);
			}
		},

		resize : function (e) {
			if(e.opts.flexible) {
				var tmp_w = e._item_w;

				e._width = parseInt(e._tg.css("width"));
				e._item_w = e._width / e._view;
				e._range = e.opts.range * e._width;

				for(var i=0; i<e._len; ++i) {
					e._pos[i] = e._pos[i] / tmp_w * e._item_w;
					e._start[i] = e._start[i] / tmp_w * e._item_w;
					e._list.eq(i).css({
						"left" : e._pos[i] + "px",
						"width" : e._item_w + "px"
					});
					if(this.opts.supportsCssTransitions && this.opts.transition) {
						e._list.eq(i).css({
							"-moz-transition" : "0ms",
							"-moz-transform" : "",
							"-ms-transition" : "0ms",
							"-ms-transform" : "",
							"-webkit-transition" : "0ms",
							"-webkit-transform" : "",
							"transition" : "0ms",
							"transform" : ""
						});
					}
				}
			}

			this.counter();
		},

		touchstart : function (e) {
			if((e.type == "touchstart" && e.originalEvent.touches.length <= 1) || e.type == "dragstart") {
				this._startX = e.pageX || e.originalEvent.touches[0].pageX;
				this._startY = e.pageY || e.originalEvent.touches[0].pageY;
				this._scroll = false;

				this._start = [];
				for(var i=0; i<this._len; ++i) {
					this._start[i] = this._pos[i];
				}
			}
		},

		touchmove : function (e) {
			if((e.type == "touchmove" && e.originalEvent.touches.length <= 1) || e.type == "drag") {
				this._left = (e.pageX || e.originalEvent.touches[0].pageX) - this._startX;
				this._top = (e.pageY || e.originalEvent.touches[0].pageY) - this._startY;
				var w = this._left < 0 ? this._left * -1 : this._left;
				var h = this._top < 0 ? this._top * -1 : this._top;

				if (w < h || this._scroll) {
					this._left = 0;
					this._drag = false;
					this._scroll = true;
				} else {
					e.preventDefault();
					this._drag = true;
					this._scroll = false;
					this.position(e);
				}

				for(var i=0; i<this._len; ++i) {
					var tmp = this._start[i] + this._left;

					if(this.opts.supportsCssTransitions && this.opts.transition) {
						var trans = "translate3d(" + tmp + "px,0,0)";
						this._list.eq(i).css({
							"left" : "",
							"-moz-transition" : "0ms",
							"-moz-transform" : trans,
							"-ms-transition" : "0ms",
							"-ms-transform" : trans,
							"-webkit-transition" : "0ms",
							"-webkit-transform" : trans,
							"transition" : "0ms",
							"transform" : trans
						});
					} else {
						this._list.eq(i).css("left", tmp + "px");
					}

					this._pos[i] = tmp;
				}
			}
		},

		touchend : function (e) {
			if((e.type == "touchend" && e.originalEvent.touches.length <= 1) || e.type == "dragend") {
				if(this._scroll) {
					this._drag = false;
					this._scroll = false;
					return false;
				}

				this.animate(this.direction());
				this._drag = false;
				this._scroll = false;
			}
		},

		position : function (d) {
			var gap = this._view * this._item_w;

			if(d == -1 || d == 1) {
				this._startX = 0;
				this._start = [];
				for(var i=0; i<this._len; ++i) {
					this._start[i] = this._pos[i];
				}
				this._left = d * gap;
			} else {
				if(this._left > gap) this._left = gap;
				if(this._left < - gap) this._left = - gap;
			}

			if(this.opts.roll) {
				var tmp_pos = [];
				for(var i=0; i<this._len; ++i) {
					tmp_pos[i] = this._pos[i];
				}
				tmp_pos.sort(function(a,b){return a-b;});

				var max_chk = tmp_pos[this._len-this._view];
				var p_min = $.inArray(tmp_pos[0], this._pos);
				var p_max = $.inArray(max_chk, this._pos);

				if(this._view <= 1) max_chk = this._len - 1;
				if(this.opts.multi) {
					if((d == 1 && tmp_pos[0] >= 0) || (this._drag && tmp_pos[0] >= 100)) {
						for(var i=0; i<this._view; ++i, ++p_min, ++p_max) {
							this._start[p_max] = this._start[p_min] - gap;
							this._list.eq(p_max).css("left", this._start[p_max] + "px");
						}
					} else if((d == -1 && tmp_pos[0] <= 0) || (this._drag && tmp_pos[0] <= -100)) {
						for(var i=0; i<this._view; ++i, ++p_min, ++p_max) {
							this._start[p_min] = this._start[p_max] + gap;
							this._list.eq(p_min).css("left", this._start[p_min] + "px");
						}
					}
				} else {
					if((d == 1 && tmp_pos[0] >= 0) || (this._drag && tmp_pos[0] > 0)) {
						for(var i=0; i<this._view; ++i, ++p_min, ++p_max) {
							this._start[p_max] = this._start[p_min] - gap;
							this._list.eq(p_max).css("left", this._start[p_max] + "px");
						}
					} else if((d == -1 && tmp_pos[max_chk] <= 0) || (this._drag && tmp_pos[max_chk] <= 0)) {
						for(var i=0; i<this._view; ++i, ++p_min, ++p_max) {
							this._start[p_min] = this._start[p_max] + gap;
							this._list.eq(p_min).css("left", this._start[p_min] + "px");
						}
					}
				}
			} else {
				if(this.limit_chk()) this._left = this._left / 2;
			}
		},

		animate : function (d, btn_click) {
			if(this._drag || !this._scroll || btn_click) {
				var _this = this;
				var speed = this._speed;

				if(btn_click) this.position(d);

				var gap = d * (this._item_w * this._view);
				if(this._left == 0 || (!this.opts.roll && this.limit_chk()) ) gap = 0;

				this._list.each(function (i, el) {
					_this._pos[i] = _this._start[i] + gap;

					if(_this.opts.supportsCssTransitions && _this.opts.transition) {
						var transition = speed + "ms";
						var transform = "translate3d(" + _this._pos[i] + "px,0,0)";

						if(btn_click) transition = "0ms";

						$(this).css({
							"left" : "",
							"-moz-transition" : transition,
							"-moz-transform" : transform,
							"-ms-transition" : transition,
							"-ms-transform" : transform,
							"-webkit-transition" : transition,
							"-webkit-transform" : transform,
							"transition" : transition,
							"transform" : transform
						});
					} else {
						$(this).stop();
						$(this).animate({"left": _this._pos[i] + "px"}, speed);
					}
				});			

				this.counter();
			}
		},

		direction : function () {
			var r = 0;

			if(this._left < -(this._range)) r = -1;
			else if(this._left > this._range) r = 1;

			if(!this._drag || this._scroll) r = 0;

			return r;
		},

		limit_chk : function () {
			var last_p = parseInt((this._len - 1) / this._view) * this._view;
			return ( (this._start[0] == 0 && this._left > 0) || (this._start[last_p] == 0 && this._left < 0) );
		},

		go_page : function (i, e) {
			var crt = ($.inArray(0, this._pos) / this._view) + 1;
			var cal = crt - (i + 1);

			while(cal != 0) {
				if(cal < 0) {
					this.animate(-1, true);
					cal++;
				} else if(cal > 0) {
					this.animate(1, true);
					cal--;
				}
			}
		},

		counter : function () {
			if(typeof(this.opts.counter) == "function") {
				var param = {
					total : Math.ceil(this._len / this._view),
					current : ($.inArray(0, this._pos) / this._view) + 1
				};
				this.opts.counter(param);
			}
		}

	};

})(jQuery);

  

时间: 2024-10-11 01:15:32

touchSlider插件案例的相关文章

中国省市区地址三级联动jQuery插件 案例下载

中国省市区地址三级联动jQuery插件 案例下载 distpicker 是一款可以实现中国省市区地址三级联动jQuery插件.它使用简单,简单设置即可完成中国省市区地址联动效果. 安装 可以通过npm或bower来安装该三级联动插件. npm install distpicker bower install distpicker 使用方法 HTML结构 基本的HTML结构是使用一个<div>容器来包裹一组<select>元素. <div><!-- containe

JQ插件案例-基于jquery和canvas的调色板

最近在研究canvas,想要弄一个canvas的所见所得工具. 在研究的过程中,猛然发现调色板不太好实现. 通过多方面研究及翻阅文献,发现网上对于调色板的实现大都是产生一个色块列表而已. 这种方式丑爆了好吧,而且选颜色麻烦死了,绿色还分那么多个块,怎么能好好选到自己心仪的颜色呢? 论插件来说的话,有一个插件还不错,基本和Photoshop的调色板差不多: 官网:spectrum 这款调色板还算比较符合我个人喜好,而且demo显示的功能也非常不错. 我没有下载,也没有去仔细研究它的实现方式,粗看了

一个前端引用Facebook评论插件案例

最近公司海外的同事提了一个新的需求:那就是将Facebook的评论系统接入到公司海外网站的资讯详情页. 下面做一个简单的介绍: 首先我们登录到Facebook开发者平台:然后进入评论插件系统(https://developers.facebook.com/docs/plugins/comments) 然后我们就可以看到Facebook评论插件的详细介绍. 进去之后我们就可以看到一个获取代码的按钮:只要输入我们需要评论的宽度就可以了: JS代码:/*************************

自定义jQuery插件(一)

自定义jQuery插件(一) 虽然现在有大量的插件可供我们选择使用,但实际开发过程中,使用别人的插件难免会带来问题,比如 插件功能强大,代码行数也随着激增,但是我们只使用其中一小部分. 使用别人的插件,很难看懂别人的代码,特别是压缩成min.js,为后期维护,需求变更等带来很严重问题. 同样想在现有插件上做进一步开发也没那么容易. 装逼 所以学习jQuery插件开发很有必要. 自定义插件的类型 自定义插件的类型主要有两种(我猜的) 1. 类级别插件 类级别插件比较简单,通过$.extend()直

jQuery自定义插件--banner图滚动

前言 jQuery是一个功能强大的库,提供了开发JavaScript项目所需的所有核心函数.很多时候我们使用jQuery的原因就是因为其使用插件的功能,然而,有时候我们还是需要使用自定义代码来扩展这些核心函数来提高开发效率.我们知道, jQuery库是为了加快JavaScript的开发速度而设计的,通过简化编写JavaScript的方式,减少代码量.所以,今天就带大家了解一下jQuery自定义插件以及自定义插件案例---banner图滚动. 一.自定义插件 自定义插件一般有两种类型:全局插件和局

JQuery-- 链式编程、静态函数,自己制作jQuery插件

一.链式编程 为什么jQuery运行链式编程 ,让我们的代码(方法)连续不间断书写(连续调用)其实主要还是jQuery很多的函数执行完毕之后,都会返回一个jQuery对象 因为获取操作的时候,会返回获取到的相应的值,无法返回jQuery对象 其实函数内部返回的就是一个jQuery对象 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"&g

阻止touchslider事件冒泡,防止左右滑动时出发全局滑动事件

最近适用mui开发一个项目,全局有个侧滑菜单offCanvasSideScroll,首页用了一个touchslider插件来实现行的左右滚动 touchslider的当滚动方向与侧滑菜单滚动方向一致时,会触发侧滑菜单的事件,打开侧滑菜单.开始想关闭侧滑菜单的监听事件,点击按钮再调出侧滑菜单,百度无果. 后来想touchslider滚动时能不能阻止事件向上冒泡,从官网下载touchslider源码 先是再开始函数增加event.stopPropagation();  结果各种问题,滚动时有小幅的上

ELK简介 es集群部署 es插件应用

Top NSD ARCHITECTURE DAY03 案例1:ES集群安装 案例2:ES集群安装配置 案例3:练习curl命令 案例4:练习插件 案例5:插入,增加,删除查询数据 案例6:安装Kibana 1 案例1:ES集群安装 1.1 问题 本案例要求: 准备1台虚拟机 部署elasticsearch第一个节点 访问9200端口查看是否安装成功 1.2 方案 1)ELK是日志分析平台,不是一款软件,而是一整套解决方案,是三个软件产品的首字母缩写,ELK分别代表: Elasticsearch:

【mybatis源码学习】mybatis的插件功能

一.mybatis的插件功能可拦截的目标 org.apache.ibatis.executor.parameter.ParameterHandler org.apache.ibatis.executor.resultset.ResultSetHandler org.apache.ibatis.executor.statement.StatementHandler org.apache.ibatis.executor.Executor 二.Mybatis的插件功能接入步骤 1.实现接口:org.a