本系列文章,如果没有特别说明,兼容安卓4.0.4+
这里我们采用swipe来做我们移动端的图片滚动
滚动原理
既然说到滚动,那跟我们上篇说到的iscroll多少有点关系吧。下面对swipe的滚动原理和iscroll的滚动原理简单分析下,以相同的结构为例:
<div class="wrap">
<ul class="scroll">
<li></li>
<li></li>
...
</ul>
</div>
相同的是都需要一个可以设置overflow为hidden的容器wrap。不同的是iscroll是对scroll元素进行滚动,通过设置其translate值或left/top值来实现滚动;而swipe是对li进行滚动,每个li有三种状态——prev,current和next,prev状态的时候向左偏移视窗的宽度,current状态正好在视觉范围内,next状态向右偏移视窗的宽度。
实战
同样其github已经有了很好的api使用说明,这里简单说下其参数配置:
window.mySwipe = new Swipe(document.getElementById('slider'), {
startSlide: 2, //起始图片切换的索引位置,默认为0
speed: 400, //动画执行时间,单位毫秒,默认为300
auto: 3000, //设置自动切换时间,单位毫秒,无默认值
continuous: true, //无限循环的图片切换效果,默认为true
disableScroll: false, //阻止由于触摸而滚动屏幕,默认为false
stopPropagation: false, //阻止事件冒泡,默认为false
callback: function(index, elem) {}, //回调函数,滚动时调用
transitionEnd: function(index, elem) {} //回调函数,滚动的transition动画结束后调用。
});
除此之外,swipe还提供了几个比较实用的api,如下:
prev()
上一页next()
下一页getPos()
获取当前页的索引getNumSlides()
获取所有项的个数slide(index, duration)
滑动方法
demo
1、简单demo
css代码如下,图片大小最大为100%宽度:
.wrap{
overflow: hidden;
visibility: hidden;
position: relative;
width: 100%;
height: 150px;
}
.wrap .inline-float{
overflow: hidden;
position: relative;
}
.wrap .inline-float li {
float: left;
width: 100%;
position: relative;
text-align: center;
}
.wrap .inline-float img {
max-width: 100%;
}
即每个li中多放几张图片,然后控制图片的宽度,以防止挤掉
.wrap .inline-float img {
max-width: 30%;
margin-left: 10px;
}
3、全屏图片
这个关键在于把图片设置背景图片,然后采用background-size来调整,这里采用的是100%,即li的宽高大小(demo中的四张图片均不同大小,然后缩放统一呈现出来的大小就是li的大小),可以根据自己的需要设置为cover或contain什么的
.wrap .inline-float li {
float: left;
width: 100%;
height: 150px;
position: relative;
text-align: center;
background-repeat:no-repeat;
background-size: 100% 100%;
background-color:#f5f5f5;
}
注:上面的几个demo好像是直接调用Swipe函数,而不是new一个对象,js修改为如下(jsbin中一修改链接数字就变了):
window.addEventListener('DOMContentLoaded', function(){
var $slide = document.getElementById('swipeSlide');
var mySwipe = new Swipe($slide,{
auto: 1000
});
});
4、添加子弹导航
js部分,设置callback函数,根据当前的位置为子弹导航添加激活状态
window.addEventListener('DOMContentLoaded', function(){
var $slide = document.getElementById('swipeSlide'),
aBullet = $slide.querySelectorAll('.icon-bullet'),
len = aBullet.length;
var mySwipe = new Swipe($slide,{
auto: 3000,
callback: function(i){
while(len--) {
aBullet[len].classList.remove('active');
}
aBullet[i].classList.add('active');
}
});
});
如需转载,烦请注明出处:http://www.w3cplus.com/mobile/mobile-terminal-refactoring-scroll-with-swipe.html