[原创]zepto打造一款移动端划屏插件_html/css_WEB-ITnose
最近忙着将项目内的jquery 2换成zepto
因为不想引用过多的zepto包,所以花了点时间
zepto真的精简了许多,源代码看着真舒服
正好项目内需要一个划屏插件,就用zepto写了一个
逻辑其实很简单,但没想到测试时,在老版本android设备浏览器上的touchmove有许多bug
做兼容倒是搞了一阵
效果图
样式1
样式2
调用
正常情况下应该是后台生成的html代码,但还是写了一套操作tab页的方法
调用简便如下:
<link rel="stylesheet" href="kslider.css" type="text/css"/><script type="text/javascript" src="http://zeptojs.com/zepto.js"></script><script type="text/javascript" src="zepto.kslider.js"></script><script type="text/javascript"> var k; $(function () { /* 参数:config change:tab页变更事件 参数e: 当前页码 tick:自动滚动间隔时间毫秒 (不设置则不自动滚动) maxWidth:容器最大宽度 (默认有100%) minWidth:容器最小宽度 (默认有100%) className:样式类名 "ks_wt_1" 标题栏-方形 (默认) "ks_wt_2" 标题栏-小圆形 或者你自定义的类名 */ k = $("#divs1").slider({ change: function (e) { console.log(e); }, maxWidth: 360, minWidth: 300 }); //js添加一页并且跳转到第4页 k.add("标题", "内容").tab(3); //删除页 //k.remove(0); //小圆形按钮标题 每隔3秒自动滚动 myimg:自己写的css类,控制里面图片大小 $("#divs2").slider({ maxWidth: 300, className: "ks_wt_2 myimg", tick: 3000 }); });</script>
html
<div id="divs1" class="kslider"> <ul class="ks_wt"> <li class="ks_t2">标题1</li> <li>标题2</li> <li>标题3</li> </ul> <div class="ks_dbox ks_ts"> <div class="ks_warp"> <ul> <li>text1</li> <li>text1</li> <li>text1</li> <li>text1</li> <li>text1</li> <li>text1</li> <li>text1</li> <li>text1</li> </ul> </div> <div class="ks_warp"> <img src="/static/imghw/default1.png" data-src="img/img1.jpg" class="lazy" / alt="[原创]zepto打造一款移动端划屏插件_html/css_WEB-ITnose" > </div> <div class="ks_warp"> <ul> <li>text3</li> <li>text3</li> <li>text3</li> <li>text3</li> <li>text3</li> <li>text3</li> </ul> </div> </div></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);}}
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);
其他
地址:https://github.com/madrobby/zepto/blob/master/src/touch.js#files
发布匆忙,如有纰漏麻烦大家指出哦,demo下载:这里
本人工作之余,闲暇时间好多……顺便来寻求下兼职!
asp.net/js/jquery/html5/css3/移动前端 经验丰富
(坐标[长沙],行业[彩票业] -- 如果有需要)
求多多支持!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PyCharm은 개발자가 코드를 보다 효율적으로 작성할 수 있도록 다양한 기능과 도구를 제공하는 강력하고 인기 있는 Python 통합 개발 환경(IDE)입니다. PyCharm의 플러그인 메커니즘은 기능을 확장하기 위한 강력한 도구입니다. 다양한 플러그인을 설치하면 PyCharm에 다양한 기능과 사용자 정의 기능을 추가할 수 있습니다. 따라서 PyCharm을 처음 접하는 사람이 플러그인을 이해하고 능숙하게 설치하는 것이 중요합니다. 이 문서에서는 PyCharm 플러그인의 전체 설치에 대해 자세히 소개합니다.
![Illustrator에서 플러그인 로드 중 오류 발생 [수정됨]](https://img.php.cn/upload/article/000/465/014/170831522770626.jpg?x-oss-process=image/resize,m_fill,h_207,w_330)
Adobe Illustrator를 시작할 때 플러그인 로딩 오류에 대한 메시지가 팝업됩니까? 일부 Illustrator 사용자는 응용 프로그램을 열 때 이 오류가 발생했습니다. 메시지 뒤에는 문제가 있는 플러그인 목록이 표시됩니다. 이 오류 메시지는 설치된 플러그인에 문제가 있음을 나타내지만 손상된 Visual C++ DLL 파일이나 손상된 기본 설정 파일과 같은 다른 이유로 인해 발생할 수도 있습니다. 이 오류가 발생하면 이 문서에서 문제 해결 방법을 안내하므로 아래 내용을 계속 읽어보세요. Illustrator에서 플러그인 로드 오류 Adobe Illustrator를 시작하려고 할 때 "플러그인 로드 오류" 오류 메시지가 표시되면 다음을 사용할 수 있습니다. 관리자로

Chrome 플러그인 확장 프로그램 설치 디렉터리는 무엇인가요? 일반적인 상황에서 Chrome 플러그인 확장의 기본 설치 디렉터리는 다음과 같습니다. 1. windowsxp에서 Chrome 플러그인의 기본 설치 디렉터리 위치: C:\DocumentsandSettings\username\LocalSettings\ApplicationData\Google\Chrome\UserData\ Windows7의 Default\Extensions2.chrome 플러그인의 기본 설치 디렉터리 위치: C:\Users\username\AppData\Local\Google\Chrome\User

사용자가 Edge 브라우저를 사용할 때 더 많은 요구 사항을 충족하기 위해 일부 플러그인을 추가할 수 있습니다. 그런데 플러그인을 추가하면 해당 플러그인이 지원되지 않는다고 표시됩니다. 이 문제를 해결하는 방법은 무엇입니까? 오늘은 에디터가 세 가지 해결 방법을 알려드리겠습니다. 방법 1: 다른 브라우저를 사용해 보세요. 방법 2: 브라우저의 Flash Player가 오래되었거나 누락되어 플러그인이 지원되지 않을 수 있습니다. 공식 웹사이트에서 최신 버전을 다운로드할 수 있습니다. 방법 3: "Ctrl+Shift+Delete" 키를 동시에 누르세요. "데이터 지우기"를 클릭하고 브라우저를 다시 엽니다.

WordPress 플러그인을 사용하여 즉각적인 위치 기능을 구현하는 방법 모바일 장치의 인기로 인해 점점 더 많은 웹사이트가 위치정보 기반 서비스를 제공하기 시작했습니다. WordPress 웹사이트에서는 플러그인을 사용하여 즉각적인 위치 확인 기능을 구현하고 방문자에게 지리적 위치와 관련된 서비스를 제공할 수 있습니다. 1. 올바른 플러그인을 선택하세요. WordPress 플러그인 라이브러리에는 위치정보 서비스를 제공하는 플러그인이 많이 있습니다. 필요와 요구 사항에 따라 올바른 플러그인을 선택하는 것이 즉각적인 위치 지정 기능을 달성하는 열쇠입니다. 다음은 몇 가지입니다.

WordPress 플러그인에 WeChat 미니 프로그램 기능을 추가하는 방법 WeChat 미니 프로그램의 인기와 인기로 인해 점점 더 많은 웹사이트와 애플리케이션이 WeChat 미니 프로그램과의 통합을 고려하기 시작했습니다. 콘텐츠 관리 시스템으로 WordPress를 사용하는 웹사이트의 경우 WeChat 애플릿 기능을 추가하면 사용자에게 더욱 편리한 액세스 경험과 더 많은 기능적 선택권을 제공할 수 있습니다. 이 기사에서는 WordPress 플러그인에 WeChat 미니 프로그램 기능을 추가하는 방법을 소개합니다. 1단계: WeChat 미니 프로그램 계정을 등록하세요. 먼저 WeChat 앱을 열어야 합니다.

PyCharm Community Edition은 충분한 플러그인을 지원합니까? 구체적인 코드 예제가 필요 소프트웨어 개발 분야에서 Python 언어가 점점 더 널리 사용됨에 따라 전문적인 Python 통합 개발 환경(IDE)인 PyCharm이 개발자들에게 선호되고 있습니다. PyCharm은 Professional 버전과 Community 버전의 두 가지 버전으로 나누어집니다. Community 버전은 무료로 제공되지만 Professional 버전에 비해 플러그인 지원이 제한됩니다. 그렇다면 문제는 PyCharm Community Edition이 충분한 플러그인을 지원하느냐는 것입니다. 이 기사에서는 특정 코드 예제를 사용하여

WordPress 플러그인을 사용하여 비디오 재생 기능을 구현하는 방법 1. 소개 웹 사이트와 블로그에서 비디오를 적용하는 것이 점점 더 보편화되고 있습니다. 고품질의 사용자 경험을 제공하기 위해 WordPress 플러그인을 사용하여 비디오 재생 기능을 구현할 수 있습니다. 이 기사에서는 WordPress 플러그인을 사용하여 비디오 재생 기능을 구현하는 방법을 소개하고 코드 예제를 제공합니다. 2. 플러그인 선택 WordPress에는 선택할 수 있는 다양한 비디오 재생 플러그인이 있습니다. 플러그인을 선택할 때 다음 측면을 고려해야 합니다. 호환성: 플러그인이 맞는지 확인하세요.
