效果图

样式1

样式2

调用

正常情况下应该是后台生成的html代码,但还是写了一套操作tab页的方法

调用简便如下:

  1. <link rel="stylesheet" href="kslider.css" type="text/css"/>
  2. <script type="text/javascript" src="http://zeptojs.com/zepto.js"></script>
  3. <script type="text/javascript" src="zepto.kslider.js"></script>
  4. <script type="text/javascript">
  5. var k;
  6.  
  7. $(function () {
  8.  
  9. /*
  10. 参数:config
  11.  
  12. change:tab页变更事件
  13. 参数e: 当前页码
  14. tick:自动滚动间隔时间毫秒 (不设置则不自动滚动)
  15. maxWidth:容器最大宽度 (默认有100%)
  16. minWidth:容器最小宽度 (默认有100%)
  17. className:样式类名
  18. "ks_wt_1" 标题栏-方形 (默认)
  19. "ks_wt_2" 标题栏-小圆形
  20. 或者你自定义的类名
  21.  
  22. */
  23.  
  24. k = $("#divs1").slider({ change: function (e) { console.log(e); }, maxWidth: 360, minWidth: 300 });
  25. //js添加一页并且跳转到第4页
  26. k.add("标题", "内容").tab(3);
  27. //删除页
  28. //k.remove(0);
  29.  
  30. //小圆形按钮标题 每隔3秒自动滚动 myimg:自己写的css类,控制里面图片大小
  31. $("#divs2").slider({ maxWidth: 300, className: "ks_wt_2 myimg", tick: 3000 });
  32. });
  33. </script>

html

  1. <div id="divs1" class="kslider">
  2. <ul class="ks_wt">
  3. <li class="ks_t2">标题1</li>
  4. <li>标题2</li>
  5. <li>标题3</li>
  6. </ul>
  7. <div class="ks_dbox ks_ts">
  8. <div class="ks_warp">
  9. <ul>
  10. <li>text1</li>
  11. <li>text1</li>
  12. <li>text1</li>
  13. <li>text1</li>
  14. <li>text1</li>
  15. <li>text1</li>
  16. <li>text1</li>
  17. <li>text1</li>
  18. </ul>
  19. </div>
  20. <div class="ks_warp">
  21. <img src="img/img1.jpg" />
  22. </div>
  23. <div class="ks_warp">
  24. <ul>
  25. <li>text3</li>
  26. <li>text3</li>
  27. <li>text3</li>
  28. <li>text3</li>
  29. <li>text3</li>
  30. <li>text3</li>
  31. </ul>
  32. </div>
  33. </div>
  34. </div>

具体代码

css

/*
kslider.css
lxk 2014.08.14
www.cnblogs.com/wingkun
*/

body{margin:0px;text-align:center;font:12px 微软雅黑;}

.kslider{width:100%;overflow:hidden;margin:0 auto;background:#f0f0f0;}

.kslider .ks_warp{width:100%;}
.kslider .ks_ts{-webkit-transition:500ms;}
.kslider .ks_dbox{width:100%;display:-webkit-box;text-align:left;}

.kslider .ks_wt{display:-webkit-box;margin:0px;padding:0px;-webkit-box-pack:center;}
.kslider .ks_wt li{text-align:center;list-style:none;background: -webkit-linear-gradient(top, #AAAAAA 0%,#979797 100%);color: #fff;}

.ks_wt_1 .ks_wt li{-webkit-box-flex:1;height:35px;line-height:35px;border-right:solid 1px #BBB;}
.ks_wt_2 .ks_wt li{background:-webkit-linear-gradient(top, #e7e7e7 0%,#dfdfdf 100%);text-indent: 20px;height:10px;width:10px;overflow:hidden; border-radius:100%;margin:5px;}

.ks_wt_1 .ks_wt .ks_t2{background:-webkit-linear-gradient(top, #e7e7e7 0%,#dfdfdf 100%); color:#000;}
.ks_wt_2 .ks_wt .ks_t2{background: -webkit-linear-gradient(top, #AAAAAA 0%,#979797 100%); -webkit-animation:kt2 500ms linear;}

@-webkit-keyframes kt2
{
0%{-webkit-transform:scale(1);}
100%{-webkit-transform:scale(1.5);}
}

  1. /*
  2. kslider.css
  3. lxk 2014.08.14
  4. www.cnblogs.com/wingkun
  5. */
  6.  
  7. body{margin:0px;text-align:center;font:12px 微软雅黑;}
  8.  
  9. .kslider{width:100%;overflow:hidden;margin:0 auto;background:#f0f0f0;}
  10.  
  11. .kslider .ks_warp{width:100%;}
  12. .kslider .ks_ts{-webkit-transition:500ms;}
  13. .kslider .ks_dbox{width:100%;display:-webkit-box;text-align:left;}
  14.  
  15. .kslider .ks_wt{display:-webkit-box;margin:0px;padding:0px;-webkit-box-pack:center;}
  16. .kslider .ks_wt li{text-align:center;list-style:none;background: -webkit-linear-gradient(top, #AAAAAA 0%,#979797 100%);color: #fff;}
  17.  
  18. .ks_wt_1 .ks_wt li{-webkit-box-flex:1;height:35px;line-height:35px;border-right:solid 1px #BBB;}
  19. .ks_wt_2 .ks_wt li{background:-webkit-linear-gradient(top, #e7e7e7 0%,#dfdfdf 100%);text-indent: 20px;height:10px;width:10px;overflow:hidden; border-radius:100%;margin:5px;}
  20.  
  21. .ks_wt_1 .ks_wt .ks_t2{background:-webkit-linear-gradient(top, #e7e7e7 0%,#dfdfdf 100%); color:#000;}
  22. .ks_wt_2 .ks_wt .ks_t2{background: -webkit-linear-gradient(top, #AAAAAA 0%,#979797 100%); -webkit-animation:kt2 500ms linear;}
  23.  
  24. @-webkit-keyframes kt2
  25. {
  26. 0%{-webkit-transform:scale(1);}
  27. 100%{-webkit-transform:scale(1.5);}
  28. }

js

/*
zepto.kslider.js
lxk 2014.08.14
www.cnblogs.com/wingkun
*/

(function ($) {
/*
参数:config

change:tab页变更事件
参数e: 当前页码
tick:自动滚动间隔时间毫秒 (不设置则不自动滚动)
maxWidth:容器最大宽度 (默认有100%)
minWidth:容器最小宽度 (默认有100%)
className:样式类名
"ks_wt_1" 标题栏-方形 (默认)
"ks_wt_2" 标题栏-小圆形
或者你自定义的类名

*/
$.fn.slider = function (config) {

config = $.extend({}, { className: "ks_wt_1" }, config);

var b = $(this), tw, timer,
target = b.find(".ks_dbox"),
title = b.find(".ks_wt"),
m = { initX: 0, initY: 0, startX: 0, endX: 0, startY: 0, canmove: false },
currentTab = 0;

b.toggleClass(config.className,true);
if (config.maxWidth) b.css({ maxWidth: config.maxWidth });
if (config.minWidth) b.css({ mixWidth: config.minWidth });

title.on("click", function (e) {
if (e.target == this) return;
toTab($(e.target).index());
});

b.on("touchstart", function (e) {
var et = e.touches[0];
if ($(et.target).closest(".ks_dbox").length != 0) {
m.canmove = true, m.initX = m.startX = et.pageX;
m.initY = et.pageY;
clearTimer();
}

}).on("touchmove", function (e) {

var et = e.touches[0];
if (m.canmove && Math.abs(et.pageY - m.initY) / Math.abs(et.pageX - m.initX) < 0.6) {
// if (m.canmove && Math.abs(et.pageX - m.startX) > 10) {
target.removeClass("ks_ts").css("-webkit-transform", "translate3d(" + (m.endX += et.pageX - m.startX) + "px,0,0)");
m.startX = et.pageX;
e.preventDefault();
}
}).on("touchend", function (e) {
if (!m.canmove) return;
target.toggleClass("ks_ts", true);

tw = target.width();
//是否超过了边界
var bl = false, current = Math.abs(m.endX / tw);

if (m.endX > 0) {
current = m.endX = 0;
bl = true;
}
else if (m.endX < -tw * (target.children().length - 1)) {
current = target.children().length - 1;
bl = true;
}

if (!bl) {
if (m.endX % tw != 0) {
//target.css("transform", "translate(" + (m.endX = -tw*Math.abs(Math.round(m.endX/tw))) + "px,0px)");
var str = parseInt((current + "").split(".")[1][0]);

if (e.changedTouches[0].pageX > m.initX) {
//往右
current = str <= 9 ? Math.floor(Math.abs(current)) : Math.abs(Math.round(m.endX / tw));
} else {
//往左
current = str >= 1 ? Math.floor(Math.abs(current)) + 1 : Math.abs(Math.round(m.endX / tw));
}
}
}
toTab(current);
setTimer();
m.canmove = false;
});

var move = function (i) {
target.css("-webkit-transform", "translate3d(" + (m.endX = i) + "px,0,0)");
}

var setIndex = function (i) {
return i < 0 ? 0 : i >= target.children().length ? target.children().length - 1 : i;
}

var toTab = function (i) {
i = setIndex(i), tw = target.width();
move(-tw * i), toTitle(i);
if (currentTab != i && config.change) {
config.change(i);
}
currentTab = i
}

var toTitle = function (i) {
if (title.length == 0) return;
title.children().toggleClass("ks_t2", false).eq(i).toggleClass("ks_t2", true);
}

var setTimer = function () {
if (!config.tick) return;
if (timer) clearTimer();
timer = setInterval(function () {
toTab(currentTab >= target.children().length - 1 ? 0 : currentTab + 1);
}, config.tick)
}

var clearTimer = function () {
clearInterval(timer);
timer = null;
}

setTimer();

return {
add: function (t, c) {
//添加tab
title.append("<li>" + t + "</li>");
target.append("<div class=\"ks_warp\">" + c + "</div>");
return this;
},
remove: function (i) {
//移除tab
if (title.children().length == 1) return;
i = setIndex(i);
title.children().eq(i).remove();
target.children().eq(i).remove();
if (i == currentTab) toTab(0);
return this;
}, tab: function (i) {
//设置或者获取当前tab
return i ? toTab(i) : currentTab;
}
}
}
})(Zepto);

  1. /*
  2. zepto.kslider.js
  3. lxk 2014.08.14
  4. www.cnblogs.com/wingkun
  5. */
  6.  
  7. (function ($) {
  8. /*
  9. 参数:config
  10.  
  11. change:tab页变更事件
  12. 参数e: 当前页码
  13. tick:自动滚动间隔时间毫秒 (不设置则不自动滚动)
  14. maxWidth:容器最大宽度 (默认有100%)
  15. minWidth:容器最小宽度 (默认有100%)
  16. className:样式类名
  17. "ks_wt_1" 标题栏-方形 (默认)
  18. "ks_wt_2" 标题栏-小圆形
  19. 或者你自定义的类名
  20.  
  21. */
  22. $.fn.slider = function (config) {
  23.  
  24. config = $.extend({}, { className: "ks_wt_1" }, config);
  25.  
  26. var b = $(this), tw, timer,
  27. target = b.find(".ks_dbox"),
  28. title = b.find(".ks_wt"),
  29. m = { initX: 0, initY: 0, startX: 0, endX: 0, startY: 0, canmove: false },
  30. currentTab = 0;
  31.  
  32. b.toggleClass(config.className,true);
  33. if (config.maxWidth) b.css({ maxWidth: config.maxWidth });
  34. if (config.minWidth) b.css({ mixWidth: config.minWidth });
  35.  
  36. title.on("click", function (e) {
  37. if (e.target == this) return;
  38. toTab($(e.target).index());
  39. });
  40.  
  41. b.on("touchstart", function (e) {
  42. var et = e.touches[0];
  43. if ($(et.target).closest(".ks_dbox").length != 0) {
  44. m.canmove = true, m.initX = m.startX = et.pageX;
  45. m.initY = et.pageY;
  46. clearTimer();
  47. }
  48.  
  49. }).on("touchmove", function (e) {
  50.  
  51. var et = e.touches[0];
  52. if (m.canmove && Math.abs(et.pageY - m.initY) / Math.abs(et.pageX - m.initX) < 0.6) {
  53. // if (m.canmove && Math.abs(et.pageX - m.startX) > 10) {
  54. target.removeClass("ks_ts").css("-webkit-transform", "translate3d(" + (m.endX += et.pageX - m.startX) + "px,0,0)");
  55. m.startX = et.pageX;
  56. e.preventDefault();
  57. }
  58. }).on("touchend", function (e) {
  59. if (!m.canmove) return;
  60. target.toggleClass("ks_ts", true);
  61.  
  62. tw = target.width();
  63. //是否超过了边界
  64. var bl = false, current = Math.abs(m.endX / tw);
  65.  
  66. if (m.endX > 0) {
  67. current = m.endX = 0;
  68. bl = true;
  69. }
  70. else if (m.endX < -tw * (target.children().length - 1)) {
  71. current = target.children().length - 1;
  72. bl = true;
  73. }
  74.  
  75. if (!bl) {
  76. if (m.endX % tw != 0) {
  77. //target.css("transform", "translate(" + (m.endX = -tw*Math.abs(Math.round(m.endX/tw))) + "px,0px)");
  78. var str = parseInt((current + "").split(".")[1][0]);
  79.  
  80. if (e.changedTouches[0].pageX > m.initX) {
  81. //往右
  82. current = str <= 9 ? Math.floor(Math.abs(current)) : Math.abs(Math.round(m.endX / tw));
  83. } else {
  84. //往左
  85. current = str >= 1 ? Math.floor(Math.abs(current)) + 1 : Math.abs(Math.round(m.endX / tw));
  86. }
  87. }
  88. }
  89. toTab(current);
  90. setTimer();
  91. m.canmove = false;
  92. });
  93.  
  94. var move = function (i) {
  95. target.css("-webkit-transform", "translate3d(" + (m.endX = i) + "px,0,0)");
  96. }
  97.  
  98. var setIndex = function (i) {
  99. return i < 0 ? 0 : i >= target.children().length ? target.children().length - 1 : i;
  100. }
  101.  
  102. var toTab = function (i) {
  103. i = setIndex(i), tw = target.width();
  104. move(-tw * i), toTitle(i);
  105. if (currentTab != i && config.change) {
  106. config.change(i);
  107. }
  108. currentTab = i
  109. }
  110.  
  111. var toTitle = function (i) {
  112. if (title.length == 0) return;
  113. title.children().toggleClass("ks_t2", false).eq(i).toggleClass("ks_t2", true);
  114. }
  115.  
  116. var setTimer = function () {
  117. if (!config.tick) return;
  118. if (timer) clearTimer();
  119. timer = setInterval(function () {
  120. toTab(currentTab >= target.children().length - 1 ? 0 : currentTab + 1);
  121. }, config.tick)
  122. }
  123.  
  124. var clearTimer = function () {
  125. clearInterval(timer);
  126. timer = null;
  127. }
  128.  
  129. setTimer();
  130.  
  131. return {
  132. add: function (t, c) {
  133. //添加tab
  134. title.append("<li>" + t + "</li>");
  135. target.append("<div class=\"ks_warp\">" + c + "</div>");
  136. return this;
  137. },
  138. remove: function (i) {
  139. //移除tab
  140. if (title.children().length == 1) return;
  141. i = setIndex(i);
  142. title.children().eq(i).remove();
  143. target.children().eq(i).remove();
  144. if (i == currentTab) toTab(0);
  145. return this;
  146. }, tab: function (i) {
  147. //设置或者获取当前tab
  148. return i ? toTab(i) : currentTab;
  149. }
  150. }
  151. }
  152. })(Zepto);

其他

  • demo里面只引用了基础的zepto,其实移动端他的touch.js也是非常有必要的,引用了之后可以将代码内的click换成zepto的tap事件

  地址:https://github.com/madrobby/zepto/blob/master/src/touch.js#files

  • 容器用的box布局,内部html样式要注意一下
  • 只支持大部分webkit内核浏览器

zepto打造一款移动端划屏插件的更多相关文章

  1. [原创]zepto打造一款移动端划屏插件

    最近忙着将项目内的jquery 2换成zepto 因为不想引用过多的zepto包,所以花了点时间 zepto真的精简了许多,源代码看着真舒服 正好项目内需要一个划屏插件,就用zepto写了一个 逻辑其 ...

  2. 【转载】jQuery手机移动端触屏日历日期选择

    文章转载自 科e互联 http://www.internetke.com/ 原文链接:http://www.internetke.com/effects/css3/2015/0120/1222.htm ...

  3. 基于zepto的移动端轻量级日期插件

    前言 做过移动Web开发的同学都知道,移动端日期选择是很常见的需求.在PC端,我们有很丰富的选择,比较出名的就有Mobiscroll和jQuery UI Datepicker.个人看来,这些插件存在的 ...

  4. 使用Python打造一款间谍程序

    知识点 这次我们使用python来打造一款间谍程序 程序中会用到许多知识点,大致分为四块 win32API  此处可以在MSDN上查看 Python基础重点在cpytes库的使用,使用方法请点击此处 ...

  5. 移动端触屏click点击事件延迟问题,以及tap的解决方案

    在移动端 触屏click事件虽然也会响应,但是总感觉是有延迟,一直听说click事件在手机上有200~300毫秒的延迟问题,亲自测了一下,在pc端模拟手机的话是测不出来的,但是用手机测试时发现延迟非常 ...

  6. 打造一款 刷Java 知识的小程序(二)

    学习Java的神器已上线,面向广大Java爱好者! 之前写的一篇:打造一款 刷Java 知识的小程序(一) 一.第二版做了什么? 第一版小程序只具有初级展示功能,知识点都是hardcode在代码里面的 ...

  7. 【FastDFS】如何打造一款高可用的分布式文件系统?这次我明白了!!

    写在前面 前面我们学习了如何基于两台服务器搭建FastDFS环境,而往往在生产环境中,需要FastDFS做到高可用,那如何基于FastDFS打造一款高可用的分布式文件系统呢?别急,今天,我们就一起来基 ...

  8. 【ASP.NET程序员福利】打造一款人见人爱的ORM(一)

          “很多人都不太认可以第三方ORM,因为考虑的点不够全面,没有大用户群体的ORM有保证,这点是不可否认确是事实.但是往往用户群体大的ORM又有不足之处,今天我们就来聊聊关于ORM的话题,打造 ...

  9. 【ASP.NET程序员福利】打造一款人见人爱的ORM(二)

    上一篇我已经给大家介绍AntORM的框架[ASP.NET程序员福利]打造一款人见人爱的ORM(一),今天就来着重介绍一下如何使用这套框架 1>AntORM 所有成员 如果你只想操作一种数据库,可 ...

随机推荐

  1. logstash Codec

    Logstash 使用一个名叫FileWatch的Ruby Gem库来监听文件变化,这个库支持glob扩展文件路径, 而且会记录一个叫.sincedb的数据库文件来跟踪被监听日志文件的当前读取位置,所 ...

  2. 4.1. 如何在Windows环境下开发Python

    4.1. 如何在Windows环境下开发Python 4.1. 如何在Windows环境下开发Python 4.1.1. Python的最原始的开发方式是什么样的 4.1.1.1. 找个文本编辑器,新 ...

  3. 管理SQL Server数据库服务器的安全防范原则

    在现实的世界中,我们不可能为每一个可能的威胁做好准备,我们只能增强自身的防护,让恶意用户更难威胁到我们的安全.SQL Server也一样,我们必须遵循一些基本的原则来保证和提高服务器的安全级别,让恶意 ...

  4. java 命令行制定logback参数

    -Dlogback.configurationFile=file:///export/Workspace/apache-cassandra/apache-cassandra-main/target/b ...

  5. 什么是 CSS 预处理器?

    什么是 CSS 预处理器?  就CSS本身而言,对于大多数Web前端从业人员来说就不是问题.学过CSS的人都知道,它不是一种编程语言.你可以用它开发网页样式,但是没法用它编程.换句话说,CSS基本上是 ...

  6. Http权威指南笔记(一) URI URL URN 关系

    定义 URI:统一资源标识符(Uniform Resource Indentifier)用来标识服务器上的资源. URL:统一资源定位符(Uniform Resouce Locator)是资源标识符最 ...

  7. SpringMVC中采用简洁的配置实现文件上传

    文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服务端处理会略有差别,个人感觉IO上传代码简单,但是也有很多硬伤,还是表单上传更合 ...

  8. 总结PHP中几种常用的网页跳转代码

    网页跳转的意思就是指当你在浏览器中访问A页面时,会自动跳转到B页面,往往网页跳转用在404页面中会比较多点.至于怎么实现网页跳转,网上已经提供了很多的方法,有些方法是不可行的,经过测试,叶德华今天就在 ...

  9. c#中的数据类型简介

    一.C#中的变量和常量 C#中用于定义常量的方式有两种一个使用const关键字,一个是用readonly关键字.使用const定义的常量叫静态常量(compile-time constant),用re ...

  10. HDU 2473 - Junk-Mail Filter ,并查集的删点

    Problem Description Recognizing junk mails is a tough task. The method used here consists of two ste ...