想学习一下轮播图的实现原理,就是那种左右滚动,可以无限循环,而且每个切换都是一样的,没有任何差别。不知道有哪位师兄师姐可以回答一下,谢谢!!!
使用绝对定位,比如轮播图width=100px,给图片排个序,记录当前的图片序号,所有隐藏的图片left=100px,显示的那张图片left=0,下一张时,就把找到下一个图片,把图片的left改成0
首先, 轮播图在html页面来说最重要的就是切换过程 。
目前比较简单的实现方法就是
第一张图和最后一张图一样。
这样当用户拖动到最后一张但是又没完全拖完整的时候,就会显示第一张的效果。
会造成一种循环的错觉。 当他拖到最后一张的时候,你就重置轮播图序列就行 。
关系到他的序列号,可以加我QQ,教你思路280342445
自己用jQuery实现的简易幻灯片轮播
过程:图片li相对ul定位,setInterval定时切换,用jQuery的hide隐藏当前active图片,show显示next下一张图片.下一张图片不存在,则重新显示li:first第一张图片.如果需要jQuery提供的淡入淡出效果,可以用fadeIn取代show,用fadeOut取代hide.如果需要jQuery的滑动效果,则可以用slideDown取代show,用slideUp取代hide.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>jQuery Easy Slider</title>
<style>
* {
margin: 0;
padding: 0;
}
img {
border: none;
}
#slider {
overflow: hidden;
width: 220px;
height: 160px;
border: 3px solid #EEE;
padding: 1px;
margin: 40px auto 0;
}
#slider li {
position: relative;
left: 0;
top: 0;
list-style: none;
}
</style>
<script src="jquery.js"></script>
<script>
$(document).ready(function() {
slider('#slider');
});
function slider(id) {
fir = $(id + ' li:first');
fir.addClass("active");
$(id + ' li').not(':first').hide();
setInterval(function () {
act = $(id + ' li.active');
if(act.next().val() != undefined) {
act.hide(0, function() {
act.next().show();
act.removeClass("active");
act.next().addClass("active");
});
} else {
act.hide(0, function() {
fir.show();
act.removeClass("active");
fir.addClass("active");
});
}
}, 2000);
}
</script>
</head>
<body>
<ul id="slider">
<li><a href="./1"><img src="1.png" /></a></li>
<li><a href="./2"><img src="2.png" /></a></li>
<li><a href="./3"><img src="3.png" /></a></li>
<li><a href="./4"><img src="4.png" /></a></li>
</ul>
</body>
</html>
http://cmstop.com/ 首页幻灯片的 addChangeEvent 函数实现了基于jQuery的图片轮播:
http://source.cmstop.com/templates/2013/js/index.js
// 首页幻灯片
$(function(){
$(".homebanner1 .nums").find("li:first").addClass("curr");
function loadImage(url, callback)
{
var img = new Image(); //创建一个Image对象,实现图片的预下载
img.src = url;
if (img.complete)
{ // 如果图片已经存在于浏览器缓存,直接调用回调函数
callback.call(img);
return; // 直接返回,不用再处理onload事件
}
img.onload = function ()
{ //图片下载完毕时异步调用callback函数。
callback.call(img);//将回调函数的this替换为Image对象
};
};
var img_count = $(".homebanner1 .imgs").find("img").length;
var transitionAutoChange = function(activePos) {
if (typeof activePos === 'undefined') activePos = 0;
var pos = activePos + 1;
if (pos >= img_count) {
pos = 0;
}
$(".homebanner1 .nums li").eq(pos).trigger('click');
};
function addChangeEvent()
{
var transitionTimeOut = false;
var transitionInterval = false;
var transitioning = false;
$(".homebanner1 .imgs li").eq(0).addClass('active');
transitionInterval = setInterval(transitionAutoChange, 7000);
$(".homebanner1 .nums li").bind("click", function(){
clearInterval(transitionInterval);
var pos = $(".homebanner1 .nums li").index(this);
var activePos = $(".homebanner1 .nums li").index($(".homebanner1 .nums .curr"));
if (pos == activePos) return ;
if (transitioning) return;
transitioning = true;
var colorArr = ['#010001', '#006dce', '#2932a1', '#38aa30'];
var color = colorArr[pos];
$('.banner').stop().animate({backgroundColor: color});
var active = $(".imgs li").eq(activePos);
var next = $(".imgs li").eq(pos);
if (!next[0]) {
transitioning = false;
return;
}
if (supportsTransitions()) {
active.fadeTo(600,0.1,function(){
active.css('opacity', 1);
});
}
if (pos > activePos) {
var type = "next";
} else {
var type = "prev";
}
var direction = type == 'next' ? 'left' : 'right';
next.addClass(type);
next[0].offsetWidth;// force reflow
active.addClass(direction);
next.addClass(direction);
$(".homebanner1 .nums li").eq(activePos).removeClass('curr');
$(".homebanner1 .nums li").eq(pos).addClass('curr');
clearTimeout(transitionTimeOut);
if (supportsTransitions()) {
transitionTimeOut = setTimeout(function(){
next.removeClass([type, direction].join(' ')).addClass('active');
active.removeClass(['active', direction].join(' '));
transitionInterval = setInterval(function(){
transitionAutoChange(pos);
}, 5000);
transitioning = false;
}, 1000);
} else {
transitionTimeOut = setTimeout(function(){
active.removeClass(['active', direction].join(' ')).css({opacity: 0});
next.css({opacity:0}).animate({opacity:1},2000, function(){
next.removeClass([type, direction].join(' ')).addClass('active');
transitionInterval = setInterval(function(){
transitionAutoChange(pos);
}, 5000);
transitioning = false;
});
}, 100);
}
});
};
$(".homebanner1 .imgs").find("img").each(function(i){
var _this = $(this);
var url = _this.attr("data-src");
loadImage(url, function(){
_this.attr("src", url);
if ((i + 1) == img_count) {
addChangeEvent();
}
});
if (!supportsTransitions() && i > 0) {
_this.parent().parent().css({'opacity': 0});
}
});
});