百度或者谷歌下类似的插件有很多,原理都差不多,关键适合自己的项目,如果移动端要引入jquery这么大的插件,只能呵呵了....

下面是工作中针对webkit内核的浏览器写的,html很简单:

<section id="banner" class="banner z-c" >
<ul class="z-c-w">
         <li class="z-c-i"></li>
       </ul>
</section>

上面的li标签实际都可以动态生成的,这里只是为了方便阅读才加上。

css:

.banner {
position:relative;
overflow:hidden;
border-bottom:1px solid #FFFDFB;
font-size:;
}
.z-c-w {
display:-webkit-box;
width:100%;
height:100%;
}
.z-c-w.transitionable {
-webkit-transition:-webkit-transform 0.25s ease;
}
.z-c-i {
display:block;
width:100%;
}
.z-c-p {
position: absolute;
margin-top: -13px;
width: 100%;
text-align: center;
}
.z-c-p span {
display:inline-block;
width:6px;
height:6px;
margin:0 4px;
border-radius:50%;
border:1px solid #7cca26;
}
.z-c-p span.active {
background-color:#7cca26;
}
.z-c-i .img-wrapper{
display: inline-block;
width:100%;
height:100%;
background: #fafafa url('../images/cart_icon.png') no-repeat center center;
}
.z-c-i a{display: block;}
.z-c-i .img-wrapper img{width:100%;}

javascript:需要引入zepto,zepto压缩后不到10k,是移动端开发不错的js库。

/*
* carousel
*/
;(function($) {
$.extend($.fn, {
carousel : function(obj) {
this.each(function(){
// 当前Zepto对象
var $self = $(this); var dom = {
wrap : $self.find(".z-c-w"),
items : $self.find(".z-c-i"),
pageControl : null,
pageItems : null
};
var settings = {
width : dom.wrap.width(),
count : dom.items.size(),
index : 0,
startX : 0,
startY : 0,
movingX : false,
movingY : false,
distance : 0,
pageControl : obj ? (obj.showControl ? true : false) : true,
autoScroll : obj ? (obj.autoScroll ? true : false) : false
};
var funs = {
init : function() {
funs.initUI();
funs.bindEvent();
if (settings.autoScroll) {
settings.interval = setInterval(funs.autoScroll, 5000);
}
},
bindEvent : function() {
dom.wrap.off().on({
"touchstart" : function(e) {

e.stopPropagation();
                   e.preventDefault();

                                settings.width = dom.wrap.width();
settings.distance = settings.width / 4; settings.startX = e.touches[0].pageX;
settings.startY = e.touches[0].pageY; if (settings.autoScroll){
clearInterval(settings.interval);
//隐藏最后一个循环页
dom.dupItem.css("visibility", "hidden");
}
},
"touchmove" : function(e) {
e.stopPropagation();
                   e.preventDefault();
var currentX = e.touches[0].pageX;
var currentY = e.touches[0].pageY;
var dX = currentX - settings.startX;
var dY = currentY - settings.startY; if (settings.movingX) {
e.stopPropagation();
e.preventDefault();
var x = 0;
if (settings.index == 0 && dX > 0 || settings.index == settings.count - 1 && dX < 0) {
x = -settings.index * settings.width + dX / 3;
} else {
x = -settings.index * settings.width + dX;
}
dom.wrap.css("-webkit-transform", "translate3d(" + x + "px,0,0)");
} else if (!settings.movingY) {
e.stopPropagation();
var dX = Math.abs(dX);
var dY = Math.abs(dY);
if (dX > 10 && dX/dY > 1) {
settings.movingX = true;
settings.movingY = false;
} else if(dY > 10 && dX/dY < 1) {
settings.movingY = true;
settings.movingX = false;
}
}
},
"touchend" : function(e) {
e.stopPropagation();
                   e.preventDefault();
settings.movingY = false;
if (settings.movingX) {
settings.movingX = false;
var currentX = e.changedTouches[0].pageX;
var distance = currentX - settings.startX;
if (Math.abs(distance) >= settings.distance) {
settings.index = settings.index - Math.abs(distance) / distance;
settings.index = settings.index < 0 ? 0 : (settings.index > (settings.count - 1) ? (settings.count - 1) : settings.index);
}
funs.continueMove();
}
if (settings.autoScroll) {
settings.interval = setInterval(funs.autoScroll, 5000);
setTimeout(function(){
dom.dupItem.css("visibility", "visible");
},250);
}
},
"webkitTransitionEnd" : function() {
dom.wrap.removeClass("transitionable");
if(settings.index >= settings.count){
settings.index %= settings.count;
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
}
}
});
dom.pageControl.off().on("touchstart", function(e) {
settings.width = dom.wrap.width();
settings.distance = settings.width / 4; var touchX = e.touches[0].pageX;
var currentX = $(dom.pageItems[settings.index]).offset().left;
if (touchX > currentX && settings.index < (settings.count - 1)) {
settings.index += 1;
funs.continueMove();
} else if (touchX < currentX && settings.index > 0) {
settings.index -= 1;
funs.continueMove();
}
});
$(window).on({
"resize" : function() {
funs.adjustPOS();
},
"orientationchange" : function() {
funs.adjustPOS();
}
});
},
adjustPOS : function() {
settings.width = dom.wrap.width();
settings.distance = settings.width / 5;
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
},
continueMove : function() {
dom.wrap.addClass("transitionable");
dom.pageItems.removeClass("active");
$(dom.pageItems[settings.index % settings.count]).addClass("active");
dom.wrap.css("-webkit-transform", "translate3d(" + -settings.index * settings.width + "px,0,0)");
},
initUI : function() {
settings.distance = settings.width / 4;
if (settings.pageControl) {
$self.append(funs.createPageDOM());
}
dom.pageControl = $self.find(".z-c-p");
dom.pageItems = $self.find(".z-c-p>span"); if(settings.autoScroll){
//重复第一个页面用作尾部的循环
funs.dupFirstItem();
}
},
dupFirstItem : function() {
dom.dupItem = $self.find(".z-c-i:first-child").clone();
$(dom.wrap).append(dom.dupItem);
},
createPageDOM : function() {
var pageControlToRemove = $self.find(".z-c-p");
if (pageControlToRemove.length) {
pageControlToRemove.remove();
}
var pageFragment = document.createDocumentFragment();
var pageDiv = document.createElement("div");
pageDiv.setAttribute("class", "z-c-p");
pageFragment.appendChild(pageDiv);
var pageItemSpan = document.createElement("span");
pageItemSpan.setAttribute("class", "active");
pageDiv.appendChild(pageItemSpan);
for (var i = 1; i < settings.count; i++) {
pageItemSpan = document.createElement("span");
pageDiv.appendChild(pageItemSpan);
}
return pageFragment;
},
clear : function() {
var pageControlToRemove = $self.find(".z-c-p");
if (pageControlToRemove.length) {
pageControlToRemove.remove();
}
dom.wrap.empty().css("-webkit-transform", "translate3d(0,0,0)");
},
autoScroll : function() {
if(dom.wrap.width() > 0 && dom.items.width() > 0){
settings.index++;
settings.width = dom.wrap.width();
funs.continueMove(settings.index);
}
}
}; funs.init(); $self.clear = funs.clear;
}); return this;
}
});
})(Zepto);

调用方法:

$("#banner").carousel({
showControl: true,
autoScroll: true
});

ps:切记在触屏事件的时候加上e.stopPropagation();和e.preventDefault,不然在android低端浏览器会有卡顿现象
 

移动web中的幻灯片切换效果的更多相关文章

  1. 利用css3的多背景图属性实现幻灯片切换效果

    css3里关于背景的属性增加了可以添加多背景图的特性,例如: .box{background: url(img/1.png),url(img/2.png),url(img/3.png);} 这段css ...

  2. 旋转木马幻灯片切换效果JS源码详解

    首先,放上慕课网的课程链接,源码是在这个课程里分享出来的,https://www.imooc.com/learn/386. 文章适合学习过这个课程的同学,再看这篇文章,可能有更深入的理解.主要是对各种 ...

  3. javascript实现的有缩略图功能的幻灯片切换效果

    不久前写了一个简单的图片效果,没想到那么快就要用到项目中,所以功能方面要丰富一下: 主要改进: 1# 用圆点代替之前简单的页数显示,并且点击圆点可以显示对应图片: 2# 点击圆点,显示对应图片的缩略图 ...

  4. Android 自定义 ViewPager 打造千变万化的图片切换效果

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38026503 记得第一次见到ViewPager这个控件,瞬间爱不释手,做东西的主 ...

  5. Axure RP Pro 7.0苏宁易购式标签切换效果教程

    转:http://jingyan.baidu.com/article/7082dc1c4f0a11e40a89bdac.html 页面标签切换效果,几乎是所有大网站(尤其是电商类网站)标配的交互方式: ...

  6. Android App中使用Gallery制作幻灯片播放效果

    http://www.jb51.net/article/83313.htm 我们有时候在iPhone手机上或者Windows上面看到动态的图片,可以通过鼠标或者手指触摸来移动它,产生动态的图片滚动效果 ...

  7. Android中使用ViewPager实现屏幕页面切换和页面切换效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...

  8. HT for Web中3D流动效果的实现与应用

    流动效果在3D领域有着广泛的应用场景,如上图中医学领域可通过3D的流动直观的观察人体血液的流动,燃气领域可用于监控管道内流动的液体或气体的流向.流速和温度等指标. 如今企业数据中心机房普遍面临着设备散 ...

  9. 自动播放——幻灯片缓冲效果&&带Loading效果的图片切换&&移动效果(按轨迹移动)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. 【UVA10816】Travel in Desert (最小瓶颈路+最短路)

    UVA10816 Travel in Desert 题目大意 沙漠中有一些道路,每个道路有一个温度和距离,要求s,t两点间的一条路径,满足温度最大值最小,并且长度最短 输入格式 输入包含多组数据. 每 ...

  2. python 常用模块大全

    1.getpass 模块  一般用于获取用户输入的密码 import getpass pwd = getpass.getpass('input your pass') print(pwd) print ...

  3. 主流服务器虚拟化技术简单使用——Hyper-V(二)

    当在多台Windows Server上部署了hyper-v的时候,需要采用合适的方法管理这些hyper-v节点. 远程桌面 最简单的方法就是逐台远程桌面登陆Windows Server,再使用每台本地 ...

  4. 基础篇:6.9)GD&T较线性尺寸公差的优缺点

    本章目的:理解GD&T标注对比线性/传统/坐标尺寸公差的优势,但也不要忘记其使用限制. 1.线性尺寸公差   1.1 定义 线性尺寸公差=传统尺寸公差=坐标尺寸公差. 传统尺寸公差(Tradi ...

  5. 《WCF全面解析》-上册 1-3章 读书笔记

    第一章.WCF简介 ESB全称为Enterprise Service Bus,即企业服务总线.把所有的服务统筹到一个总线里面请求和分发,方便管理. WCF(Windows Communication ...

  6. LINUX安装UNZIP

    安装完linux ,发现没有UNZIP,没办法,重新安装. 1.获取unzip源码 sudo wget http://downloads.sourceforge.net/infozip/unzip55 ...

  7. C++11并发编程:多线程std::thread

    一:概述 C++11引入了thread类,大大降低了多线程使用的复杂度,原先使用多线程只能用系统的API,无法解决跨平台问题,一套代码平台移植,对应多线程代码也必须要修改.现在在C++11中只需使用语 ...

  8. HDU 5700——区间交——————【线段树+枚举】

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  9. 架构实战项目心得(六)(补):mongodb.conf参数详解

    --dbpath 数据库路径(数据文件)--logpath 日志文件路径--master 指定为主机器--slave 指定为从机器--source 指定主机器的IP地址--pologSize 指定日志 ...

  10. Android中BitmapFactory.Options详解

    在Android中,BitmapFactory相信大家都很熟悉了,这个类里面的所有方法都是用来解码创建一个Bitmap,其中有一个重要的类是Options,此类用于解码Bitmap时的各种参数控制,那 ...