今天分享下移动端原生js的无缝轮播图;

移动端尽量减少使用DOM操作来频繁的浪费移动端设备的性能,所以这个无缝轮播图更多的使用了transition和transform,无缝的思想和昨天分享的PC端的无缝轮播的思想是一样的,分别在正常的图片的前面插入了最后一张图片和在正常图片的最后插入了第一张图片,在运动到这两张图片时候瞬间清除transition并把整个图片链拉回到正常图片流的位置,从而从产生了无缝

这个移动端轮播图中还阐述了一个思路:为了更好的考虑用户的体验,当用户滑动屏幕的距离小于一定的值得时候我们图片并不会更换到下一张,这个效果的产生得益于流程控制if判断用户按下手指和抬起手指的坐标差的值

相同的今天的例子中也使用了开关的概念,具体思路昨天的文章中已经阐述

今天的例子以640的分辨率为基准,并在js动态的改变onresize时候值,使我们的代码满足不同手机的尺寸

The best preparation for tomorrow is doing your best today.
过好今天,是对明天最好的准备

html代码:

    <div id="tabs">
<ul>
<li style="background:pink;">3</li>
<li style="background:red;">0</li>
<li style="background:green;">1</li>
<li style="background:yellow;">2</li>
<li style="background:pink;">3</li>
<li style="background:red;">0</li>
</ul>
</div>

css代码:

 <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no,email=no">
<style>
*{
padding: 0;
margin: 0;
list-style:none;
}
html{
font-size:20px;
}
#tabs ul{
width: 96rem;
height: 100%;
overflow:hidden;
transform:translateX(-16rem);
}
#tabs ul li{
width: 16rem;
height: 7.5rem;
float:left;
font-size:3rem;
color:#fff;
text-align:center;
line-height:7.5rem;
}

js代码:

        //以640的分辨率为基准分辨率设置的css模型尺寸,闭包中的代码为实时改变单位尺寸
(function(window,document){
function change(){
var oHTML=document.getElementsByTagName('html')[0];
oHTML.style.fontSize=20*document.documentElement.clientWidth/320+'px';
}
change();
window.addEventListener('resize',change,false);
})(window,document); document.addEventListener('DOMContentLoaded',function(){
var oTab=document.getElementById('tabs');
var oUl=oTab.getElementsByTagName('ul')[0];
var aLi=oUl.children;
var iNow=1;
var x=-aLi[0].offsetWidth*iNow;
//设置开关
var bReady=false; oUl.addEventListener('touchstart',function(ev){
if(bReady){return;}
bReady=true;
oUl.style.transition='none';
//当开始触摸的时候记录按下的坐标
var downX=ev.targetTouches[0].pageX;
var disX=downX-x; function fnMove(ev){
//在move的时候重新计算位移,并给ul赋值
x=ev.targetTouches[0].pageX-disX;
oUl.style.transform='translateX('+x+'px)';
} function fnEnd(ev){
document.removeEventListener('touchmove',fnMove,false);
document.removeEventListener('touchend',fnEnd,false);
//在抬起的时候记录抬起的位置,注意抬起的位置是changedTouches[0]
var upX=ev.changedTouches[0].pageX;
//开启transition
oUl.style.transition='0.4s all ease';
//这里为了用户体验,判断了一个最小移动距离,当移动距离小于这个值得时候并不发生运动
if((Math.abs(upX-downX))>50){
//判断移动方向,是向右还是向左
if(downX>upX){
iNow++;
//设置移动范围
if(iNow==aLi.length) iNow=aLi.length-1;
}else{
//和右面是相反的
iNow--;
if(iNow==-1) iNow=0;
}
}
//进行赋值
x=-aLi[0].offsetWidth*iNow;
oUl.style.transform='translateX('+x+'px)'; //设置ul的变化
function tEnd(){
//为了不让瞬间拉回被发现,首先要清除transition
oUl.style.transition='none';
//进行无缝判断,当图片到右面倒数第二张的时候拉回到第二张
if(iNow==aLi.length-1){
iNow=1;
}else if(iNow==0){
//当图片运动到第一张的时候瞬间拉回到倒数第三张
iNow=aLi.length-2;
}
x=-aLi[0].offsetWidth*iNow;
oUl.style.transform='translateX('+x+'px)';
bReady=false;
}
oUl.addEventListener('transitionend',tEnd,false);
}
document.addEventListener('touchmove',fnMove,false);
document.addEventListener('touchend',fnEnd,false);
ev.preventDefault();
},false);
},false);
</script>

  

js原生选项卡(包含移动端无缝选项卡)三的更多相关文章

  1. js原生选项卡(包含无缝滚动轮播图)一

    原生js选项卡的几种写法,整片文章我会由简及难的描述几种常用的原生选项卡的写法: Improve little by little every day! 1>基本选项卡: 思路:循环中先清除再添 ...

  2. tab选项卡切换(js原生、jQuery )

    思路: ① 遍历Tab选项 ② 然后给每个Tab选项绑定点击事件 ③ 每次点击时清除所有Tab选项及Tab选项内容的样式,然后给当前Tab选项添加标记样式,给当前Tab选项添加显示样式 <!DO ...

  3. JS原生ajax

    原文链接:http://caibaojian.com/ajax-jsonp.html 一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面: ajax的技术核心是 XMLHttpRe ...

  4. js原生高逼格插件

    如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高 ...

  5. js原生代码实现轮播图案例

    一.轮播图是现在网站网页上最常见的效果之一,对于轮播图的功能,要求不同,效果也不同! 我们见过很多通过不同的方式,实现这一效果,但是有很多比较麻烦,而且不容易理解,兼容性也不好. 在这里分享一下,用j ...

  6. 基于zepto的插件之移动端无缝向上滚动并上下触摸滑动

    该插件乃本博客作者所写,目的在于提升作者的js能力,也给一些js菜鸟在使用插件时提供一些便利,老鸟就悠然地飞过吧. 公司的移动端项目是基于zepto的,有一个页面要求文字能够无缝地不停向上滚动,但查了 ...

  7. js原生事件系统与坐标系统

    今天来实现一个可兼容的js原生拖拽,在这里面我将会讲到: 1.封装兼容性的事件系统. 2.封装得到鼠标当前位置的系统. 3.完成拖拽的实现. 首先,我们要讲到鼠标位置的获取,讲到这个,就离不开js的w ...

  8. 15、js 原生基础总结

    Day1 一.什么是JS?   ==基于对象==和==事件驱动==的客户端脚本语言 二.哪一年?哪个公司?谁?第一个名字是什么? 1995,NetScape(网景公司),布兰登(Brendan Eic ...

  9. js原生实现轮播图效果(面向对象编程)

    面向对象编程js原生实现轮播图效果 1.先看效果图 2.需要实现的功能: 自动轮播 点击左右箭头按钮无缝轮播 点击数字按钮切换图片 分析:如何实现无缝轮播? 在一个固定大小的相框里有一个ul标签,其长 ...

随机推荐

  1. 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)

    先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...

  2. Apache服务器的URL重定向

    前端时间要整个Apache重定向功能,在此记录一下. 一.安装Apache Windows版本官方下载安装文件httpd-2.2.21-win32-x86-openssl-0.9.8r,选择安装目录, ...

  3. 【读书笔记】iOS-忽略编译警告

    一,忽略编译警告的命令. -w   禁止掉所有的编译警告. -Wno-unused-variable  只禁止掉未使用的变量的编译警告. 二,忽略编译警告的方法. targets--->Buil ...

  4. iOS中 @synthesize 和 @dynamic 区别

    OC object-c 为了让java的开发者习惯 使用.的操作,所以可以将接口类中的变量 使用@property来声明属性.但是在.h中声明的属性,必须在.m中使用@synthesize或者@dyn ...

  5. iOS OC内联函数 inline的详解

    inline 在iOS中的一些框架中,static inline是经常出现的关键字组合. static自不用多说,表示在当前文件中应用,如 static A, 在其它文件中也可以出现static A. ...

  6. CoreAnimation-08-CATransition

    概述 简介 CATransition又称转场动画,是CAAnimation的子类,可以直接使用 转场动画主要用于为图层提供移入/移出屏幕的动画效果 转场动画常见的应用是UINavigationCont ...

  7. iOS之UI--CAShapeLayer

    关于CAShapeLayer 内容大纲: CAShapeLayer简介 贝塞尔曲线与CAShapeLayer的关系 strokeStart和strokeEnd 动画 用CAShapeLayer实现进度 ...

  8. android 之 adb 启动问题的一般解决办法

    有时,当我们打开eclipse准备运行Android项目时,虚拟机会启动不了,并且会出现下面的报错. [2015-10-07 16:47:46 - Game2048] ---------------- ...

  9. 【php】使用gdb调试php程序

    1.简介 GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具.如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC.BCB的图形化调试器更强大的功能.同时GDB也具有例如d ...

  10. Android开发之 Android应用程序目录结构解析

    建立的HelloWorld的应用项目,其代码是由ADT插件自动生成的,形成Android项目特有的结构框架. 接下来让我带领大家解析一个Android程序的各个组成部分,这次我们拿一个Hello,Wo ...