图片滑动slider
代码非原创,自己有改动
当改为垂直切换时,要将container的width设为一张图片的宽度,此时图片的排列是垂直的,切换时才会一张换一张
<style type="text/css"> | |
.main {margin:0; padding:0;width:300px; height:140px; position:relative;overflow: hidden;} | |
.container, .container *{margin:0; padding:0;} | |
.container{width:1500px; height:140px; position:relative;} | |
.slider{position:relative;} | |
.slider li{ | |
list-style:none; | |
list-style-image:inherit; | |
display:block; | |
float: left; | |
color: #004985; | |
text-align: center; | |
line-height: 20px; | |
font-size: 16px; | |
cursor:pointer; | |
overflow:hidden; | |
// background-color: #ddd; | |
} | |
.slider img{ width:300px; height:120px; display:block;border:0;list-style: none;} | |
.num{ position:absolute; width: 600px;left:5px; bottom:0px;} | |
.num li{ | |
float: left; | |
list-style:none; | |
color: #004985; | |
text-align: center; | |
line-height: 20px; | |
width: 20px; | |
height: 20px; | |
font-family: Arial; | |
font-size: 20px; | |
cursor: pointer; | |
overflow: hidden; | |
margin-right: 245px; | |
filter:alpha(opacity=80); | |
-moz-opacity:0.8; | |
} | |
</style> |
<div class="main"> | |
<div class="container" id="idTransformView"> | |
<ul class="slider" id="idSlider"> | |
<li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7014642654D5.jpg" /></a>111嗷嗷嗷嗷嗷嗷嗷嗷嗷嗷</li> | |
<li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/77B454E7A235.jpg" /></a>222鹅鹅鹅饿鹅鹅鹅鹅鹅鹅饿</li> | |
<li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7640478553BB.jpg" /></a>333呵呵呵呵呵呵呵呵呵呵</li> | |
<li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/729334C3EC1C.jpg" /></a>444啊啊啊啊啊啊啊啊啊</li> | |
<li><a href=""><img src="http://rescdn.qqmail.com/dyimg/20120330/7DB324EF4FC5.jpg" /></a>555哦哦哦哦哦哦哦哦哦哦</li> | |
</ul> | |
<ul class="num" id="idNum"> | |
<li>←</li> | |
<li>→</li> | |
</ul> | |
</div> | |
</div> |
<script type="text/javascript"> | |
var $$ = function (id) { | |
return "string" == typeof id ? document.getElementById(id) : id; | |
}; | |
var Class = { | |
create: function() { | |
return function() { | |
this.initialize.apply(this, arguments); | |
} | |
} | |
} | |
Object.extend = function(destination, source) { | |
for (var property in source) { | |
destination[property] = source[property]; | |
} | |
return destination; | |
} | |
var TransformView = Class.create(); | |
TransformView.prototype = { | |
//容器对象,滑动对象,切换参数,切换数量 | |
initialize: function(container, slider, parameter, count, options) { | |
if(parameter <= 0 || count <= 0) return; | |
var oContainer = $$(container), oSlider = $$(slider), oThis = this; | |
this.Index = 0;//当前索引 | |
this._timer = null;//定时器 | |
this._slider = oSlider;//滑动对象 | |
this._parameter = parameter;//切换参数 | |
this._count = count || 0;//切换数量 | |
this._target = 0;//目标参数 | |
this.SetOptions(options); | |
this.Up = !!this.options.Up; | |
this.Step = Math.abs(this.options.Step); | |
this.Time = Math.abs(this.options.Time); | |
this.Auto = !!this.options.Auto; | |
this.Pause = Math.abs(this.options.Pause); | |
this.onStart = this.options.onStart; | |
this.onFinish = this.options.onFinish; | |
oContainer.style.overflow = "hidden"; | |
oContainer.style.position = "relative"; | |
oSlider.style.position = "absolute"; | |
oSlider.style.top = oSlider.style.left = 0; | |
}, | |
//设置默认属性 | |
SetOptions: function(options) { | |
this.options = {//默认值 | |
Up: false,//是否向上(否则向左) | |
Step: 10,//滑动变化率 | |
Time: 10,//滑动延时 | |
Auto: true,//是否自动转换 | |
Pause: 2000,//停顿时间(Auto为true时有效) | |
onStart: function(){},//开始转换时执行 | |
onFinish: function(){}//完成转换时执行 | |
}; | |
Object.extend(this.options, options || {}); | |
}, | |
//开始切换设置 | |
Start: function() { | |
if(this.Index < 0){ | |
this.Index = this._count - 1; | |
} else if (this.Index >= this._count){ this.Index = 0; } | |
this._target = -1 * this._parameter * this.Index; | |
this.onStart(); | |
this.Move(); | |
}, | |
//移动 | |
Move: function() { | |
clearTimeout(this._timer); | |
var oThis = this, style = this.Up ? "top" : "left", iNow = parseInt(this._slider.style[style]) || 0, iStep = this.GetStep(this._target, iNow); | |
if (iStep != 0) { | |
this._slider.style[style] = (iNow + iStep) + "px"; | |
this._timer = setTimeout(function(){ oThis.Move(); }, this.Time); | |
} else { | |
this._slider.style[style] = this._target + "px"; | |
this.onFinish(); | |
if (this.Auto) { this._timer = setTimeout(function(){ oThis.Index++; oThis.Start(); }, this.Pause); } | |
} | |
}, | |
//获取步长 | |
GetStep: function(iTarget, iNow) { | |
var iStep = (iTarget - iNow) / this.Step; | |
if (iStep == 0) return 0; | |
if (Math.abs(iStep) < 1) return (iStep > 0 ? 1 : -1); | |
return iStep; | |
}, | |
//停止 | |
Stop: function(iTarget, iNow) { | |
clearTimeout(this._timer); | |
this._slider.style[this.Up ? "top" : "left"] = this._target + "px"; | |
} | |
}; | |
window.οnlοad=function(){ | |
this._pinNum = 5; //图数 | |
this._movNum = 300; //距离 | |
function Each(list, fun){ | |
for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } | |
}; | |
var objs = $$("idNum").getElementsByTagName("li"); | |
var tv = new TransformView("idTransformView", "idSlider",this._movNum,this._pinNum , { | |
onStart : function(){ Each(objs, function(o, i){ o.className = tv.Index ? "on" : ""; }) }//按钮样式 | |
}); | |
tv.Start(); | |
Each(objs, function(o, i){ | |
o.onclick = function(){ | |
o.className = "on"; | |
tv.Auto = true; | |
//tv.Index = i; | |
if(i == 0){tv.Index -=1;} | |
else if(i == 1){tv.Index += 1;} | |
tv.Start(); | |
} | |
o.onmouseout = function(){ | |
o.className = ""; | |
tv.Auto = true; | |
tv.Start(); | |
} | |
}) | |
} | |
if (Object.prototype.toJSONString){ | |
var oldToJSONString = Object.toJSONString; | |
Object.prototype.toJSONString = function(){ | |
if (arguments.length > 0){ | |
return false; | |
}else{ | |
return oldToJSONString.apply(this, arguments); | |
} | |
} | |
} | |
</script> |
num里的li本来是放数字的,我给改成左右箭头切换了,原来js是这样的
window.οnlοad=function(){ | |
this._pinNum = 5; //图数 | |
this._movNum = 126; //距离 | |
function Each(list, fun){ | |
for (var i = 0, len = list.length; i < len; i++) { fun(list[i], i); } | |
}; | |
var objs = $("idNum").getElementsByTagName("li"); | |
var tv = new TransformView("idTransformView", "idSlider",this._movNum,this._pinNum , { | |
onStart : function(){ Each(objs, function(o, i){ o.className = tv.Index == i ? "on" : ""; }) }//按钮样式 | |
}); | |
tv.Start(); | |
Each(objs, function(o, i){ | |
o.onmouseover = function(){ | |
o.className = "on"; | |
tv.Auto = true; | |
tv.Index = i; | |
tv.Start(); | |
} | |
o.onmouseout = function(){ | |
o.className = ""; | |
tv.Auto = true; | |
tv.Start(); | |
} | |
}) | |
} |
因为我要放在wap上运行,所以onmouseover有点不好控制,给改成onclick了
转载于:https://www.cnblogs.com/sephy/archive/2012/04/19/2456980.html