<html>
<head>
<title>簡約的手風琴圖片展示效果圖</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
#slider { clear:both; width: 1190px; height: 275px; border: 1px #ddd solid; position:relative; overflow: hidden; }
#slider .slide { position: absolute; top: 0px; width: 435px; height: 275px; border-left: 1px #ddd solid; background-color:#fff; overflow: hidden;}
#slider .slide img{ width:100%; height:100%;}
#slider .tp { position: absolute; filter: alpha(opacity=100); opacity: 1; visibility: hidden;}
#slider .text { position: absolute; top: 1%; top: 100%; left: 10px; width: 470px; color: #FFF; font-size: 0.9em; text-align: justify; }
#slider .text .title { color: #fff; font-weight: bold; font-size: 1.2em; margin-right: 1.5em; text-decoration: none;}
#slider .backgroundText { position: absolute; width: 100%; height: 100%; top: 100%; background-color:#000; filter: alpha(opacity=40); opacity: 0.4;}
</style>
</head>
<body>
<div id="slider">
<div class="slide">
<img class="tp" src="images/1.jpg" alt="">
<div class="text"><span class="title">标題1</span> 這裏是内容1。</div>
</div>
<div class="slide">
<img class="tp" src="images/2.jpg" alt="">
<div class="text"><span class="title">标題2</span> 這裏是内容2。</div>
</div>
<div class="slide">
<img class="tp" src="images/3.jpg" alt="">
<div class="text"><span class="title">标題3</span> 這裏是内容3。</div>
</div>
<div class="slide">
<img class="tp" src="images/4.jpg" alt="">
<div class="text"><span class="title">标題4</span> 這裏是内容4。</div>
</div>
<div class="slide">
<img class="tp" src="images/5.jpg" alt="">
<div class="text"><span class="title">标題5</span> 這裏是内容5。</div>
</div>
</div>
<script type="text/javascript">
var slider = function() {
function getElementsByClass(object, tag, className) {
var o = object.getElementsByTagName(tag);
for ( var i = 0, n = o.length, ret = []; i < n; i++) {
if (o[i].className == className) ret.push(o[i]);
}
if (ret.length == 1) ret = ret[0];
return ret;
}
function setOpacity (obj,o) {
if (obj.filters) obj.filters.alpha.opacity = Math.round(o);
else obj.style.opacity = o / 100;
}
//滑塊構造函數
function Slider(oCont, speed, iW, iH, oP) {
this.slides = [];
this.over = false;
this.S = this.S0 = speed;
this.iW = iW;
this.iH = iH;
this.oP = oP;
this.oc = document.getElementById(oCont);
this.frm = getElementsByClass(this.oc, 'div', 'slide');
this.NF = this.frm.length;
this.resize();
for (var i = 0; i < this.NF; i++) {
this.slides[i] = new Slide(this, i);
}
this.oc.parent = this;
this.view = this.slides[0];
this.Z = this.mx;
//鼠标懸停事件
//this.oc.onmouseout = function () {
// this.parent.mouseout();
// return false;
//}
}
Slider.prototype = {
//動畫循環
run : function () {
this.Z += this.over ? (this.mn - this.Z) * .5 : (this.mx - this.Z) * .5;
this.view.calc();
var i = this.NF;
while (i--) this.slides[i].move();
},
//調整大(dà)小(xiǎo)
resize : function () {
this.wh = this.oc.clientWidth;
this.ht = this.oc.clientHeight;
this.wr = this.wh * this.iW;
this.r = this.ht / this.wr;
this.mx = this.wh / this.NF;
this.mn = (this.wh * (1 - this.iW)) / (this.NF - 1);
},
//休息
mouseout : function () {
this.over = false;
setOpacity(this.view.img, this.oP);
}
}
//幻燈片構造函數
Slide = function (parent, N) {
this.parent = parent;
this.N = N;
this.x0 = this.x1 = N * parent.mx;
this.v = 0;
this.loaded = false;
this.cpt = 0;
this.start = new Date();
this.obj = parent.frm[N];
this.txt = getElementsByClass(this.obj, 'div', 'text');
this.img = getElementsByClass(this.obj, 'img', 'tp');
this.bkg = document.createElement('div');
this.bkg.className = 'backgroundText';
this.obj.insertBefore(this.bkg, this.txt);
if (N == 0) this.obj.style.borderLeft = 'none';
this.obj.style.left = Math.floor(this.x0) + 'px';
setOpacity(this.img, parent.oP);
//鼠标事件
this.obj.parent = this;
this.obj.onmouseover = function() {
this.parent.over();
return false;
}
}
Slide.prototype = {
//目标位置
calc : function() {
var that = this.parent;
//左幻燈片
for (var i = 0; i <= this.N; i++) {
that.slides[i].x1 = i * that.Z;
}
//右幻燈片
for (var i = this.N + 1; i < that.NF; i++) {
that.slides[i].x1 = that.wh - (that.NF - i) * that.Z;
}
},
//HTML動畫:移動幻燈片
move : function() {
var that = this.parent;
var s = (this.x1 - this.x0) / that.S;
//橫向滑動
if (this.N && Math.abs(s) > .5) {
this.obj.style.left = Math.floor(this.x0 += s) + 'px';
}
//垂直文本
var v = (this.N < that.NF - 1) ? that.slides[this.N + 1].x0 - this.x0 : that.wh - this.x0;
if (Math.abs(v - this.v) > .5) {
this.bkg.style.top = this.txt.style.top = Math.floor(2 + that.ht - (v - that.Z) * that.iH * that.r) + 'px';
this.v = v;
this.cpt++;
} else {
if (!this.pro) {
//調整速度
this.pro = true;
var tps = new Date() - this.start;
if(this.cpt > 1) {
that.S = Math.max(2, (28 / (tps / this.cpt)) * that.S0);
}
}
}
if (!this.loaded) {
if (this.img.complete) {
this.img.style.visibility = 'visible';
this.loaded = true;
}
}
},
//燈光
over : function () {
this.parent.resize();
this.parent.over = true;
setOpacity(this.parent.view.img, this.parent.oP);
this.parent.view = this;
this.start = new Date();
this.cpt = 0;
this.pro = false;
this.calc();
setOpacity(this.img, 100);
}
}
//公共方法-腳本初始化
return {
init : function() {
//在此處創建滑塊實例
//參數:HTML容器ID、速度(2快速-20慢(màn)速)、水平移動比率、文本垂直移動比率、不透明度
this.myslider = new Slider("slider", 12, 1.1/3, 1/3, 90);
setInterval("slider.myslider.run();", 16);
}
}
}();
slider.init(); //開(kāi)始執行
</script>
</body>
</html>
<head>
<title>簡約的手風琴圖片展示效果圖</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<style type="text/css">
#slider { clear:both; width: 1190px; height: 275px; border: 1px #ddd solid; position:relative; overflow: hidden; }
#slider .slide { position: absolute; top: 0px; width: 435px; height: 275px; border-left: 1px #ddd solid; background-color:#fff; overflow: hidden;}
#slider .slide img{ width:100%; height:100%;}
#slider .tp { position: absolute; filter: alpha(opacity=100); opacity: 1; visibility: hidden;}
#slider .text { position: absolute; top: 1%; top: 100%; left: 10px; width: 470px; color: #FFF; font-size: 0.9em; text-align: justify; }
#slider .text .title { color: #fff; font-weight: bold; font-size: 1.2em; margin-right: 1.5em; text-decoration: none;}
#slider .backgroundText { position: absolute; width: 100%; height: 100%; top: 100%; background-color:#000; filter: alpha(opacity=40); opacity: 0.4;}
</style>
</head>
<body>
<div id="slider">
<div class="slide">
<img class="tp" src="images/1.jpg" alt="">
<div class="text"><span class="title">标題1</span> 這裏是内容1。</div>
</div>
<div class="slide">
<img class="tp" src="images/2.jpg" alt="">
<div class="text"><span class="title">标題2</span> 這裏是内容2。</div>
</div>
<div class="slide">
<img class="tp" src="images/3.jpg" alt="">
<div class="text"><span class="title">标題3</span> 這裏是内容3。</div>
</div>
<div class="slide">
<img class="tp" src="images/4.jpg" alt="">
<div class="text"><span class="title">标題4</span> 這裏是内容4。</div>
</div>
<div class="slide">
<img class="tp" src="images/5.jpg" alt="">
<div class="text"><span class="title">标題5</span> 這裏是内容5。</div>
</div>
</div>
<script type="text/javascript">
var slider = function() {
function getElementsByClass(object, tag, className) {
var o = object.getElementsByTagName(tag);
for ( var i = 0, n = o.length, ret = []; i < n; i++) {
if (o[i].className == className) ret.push(o[i]);
}
if (ret.length == 1) ret = ret[0];
return ret;
}
function setOpacity (obj,o) {
if (obj.filters) obj.filters.alpha.opacity = Math.round(o);
else obj.style.opacity = o / 100;
}
//滑塊構造函數
function Slider(oCont, speed, iW, iH, oP) {
this.slides = [];
this.over = false;
this.S = this.S0 = speed;
this.iW = iW;
this.iH = iH;
this.oP = oP;
this.oc = document.getElementById(oCont);
this.frm = getElementsByClass(this.oc, 'div', 'slide');
this.NF = this.frm.length;
this.resize();
for (var i = 0; i < this.NF; i++) {
this.slides[i] = new Slide(this, i);
}
this.oc.parent = this;
this.view = this.slides[0];
this.Z = this.mx;
//鼠标懸停事件
//this.oc.onmouseout = function () {
// this.parent.mouseout();
// return false;
//}
}
Slider.prototype = {
//動畫循環
run : function () {
this.Z += this.over ? (this.mn - this.Z) * .5 : (this.mx - this.Z) * .5;
this.view.calc();
var i = this.NF;
while (i--) this.slides[i].move();
},
//調整大(dà)小(xiǎo)
resize : function () {
this.wh = this.oc.clientWidth;
this.ht = this.oc.clientHeight;
this.wr = this.wh * this.iW;
this.r = this.ht / this.wr;
this.mx = this.wh / this.NF;
this.mn = (this.wh * (1 - this.iW)) / (this.NF - 1);
},
//休息
mouseout : function () {
this.over = false;
setOpacity(this.view.img, this.oP);
}
}
//幻燈片構造函數
Slide = function (parent, N) {
this.parent = parent;
this.N = N;
this.x0 = this.x1 = N * parent.mx;
this.v = 0;
this.loaded = false;
this.cpt = 0;
this.start = new Date();
this.obj = parent.frm[N];
this.txt = getElementsByClass(this.obj, 'div', 'text');
this.img = getElementsByClass(this.obj, 'img', 'tp');
this.bkg = document.createElement('div');
this.bkg.className = 'backgroundText';
this.obj.insertBefore(this.bkg, this.txt);
if (N == 0) this.obj.style.borderLeft = 'none';
this.obj.style.left = Math.floor(this.x0) + 'px';
setOpacity(this.img, parent.oP);
//鼠标事件
this.obj.parent = this;
this.obj.onmouseover = function() {
this.parent.over();
return false;
}
}
Slide.prototype = {
//目标位置
calc : function() {
var that = this.parent;
//左幻燈片
for (var i = 0; i <= this.N; i++) {
that.slides[i].x1 = i * that.Z;
}
//右幻燈片
for (var i = this.N + 1; i < that.NF; i++) {
that.slides[i].x1 = that.wh - (that.NF - i) * that.Z;
}
},
//HTML動畫:移動幻燈片
move : function() {
var that = this.parent;
var s = (this.x1 - this.x0) / that.S;
//橫向滑動
if (this.N && Math.abs(s) > .5) {
this.obj.style.left = Math.floor(this.x0 += s) + 'px';
}
//垂直文本
var v = (this.N < that.NF - 1) ? that.slides[this.N + 1].x0 - this.x0 : that.wh - this.x0;
if (Math.abs(v - this.v) > .5) {
this.bkg.style.top = this.txt.style.top = Math.floor(2 + that.ht - (v - that.Z) * that.iH * that.r) + 'px';
this.v = v;
this.cpt++;
} else {
if (!this.pro) {
//調整速度
this.pro = true;
var tps = new Date() - this.start;
if(this.cpt > 1) {
that.S = Math.max(2, (28 / (tps / this.cpt)) * that.S0);
}
}
}
if (!this.loaded) {
if (this.img.complete) {
this.img.style.visibility = 'visible';
this.loaded = true;
}
}
},
//燈光
over : function () {
this.parent.resize();
this.parent.over = true;
setOpacity(this.parent.view.img, this.parent.oP);
this.parent.view = this;
this.start = new Date();
this.cpt = 0;
this.pro = false;
this.calc();
setOpacity(this.img, 100);
}
}
//公共方法-腳本初始化
return {
init : function() {
//在此處創建滑塊實例
//參數:HTML容器ID、速度(2快速-20慢(màn)速)、水平移動比率、文本垂直移動比率、不透明度
this.myslider = new Slider("slider", 12, 1.1/3, 1/3, 90);
setInterval("slider.myslider.run();", 16);
}
}
}();
slider.init(); //開(kāi)始執行
</script>
</body>
</html>