<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>超酷超绚精美图片展示效果代码(七) - 网页特效观止-网页特效代码|JsCode.CN|</title>
<meta http-equiv="imagetoolbar" content="no">
<style type="text/css">
html {
overflow: hidden;
}
body {
position: absolute;
margin: 0px;
padding: 0px;
background: #111;
width: 100%;
height: 100%;
}
#center {
position: absolute;
left: 50%;
top:  50%;
}
#slider {
position: absolute;
width: 820px;
height: 333px;
left: -430px;
top: -186px;
overflow: hidden;
background: #000;
border: 20px solid #000;
}
#slider .slide {
position: absolute;
top: 0px;
height: 333px;
width: 500px;
background: #000;
overflow: hidden;
border-left: #000 solid 1px;
cursor: default;
}
#slider .title   {
color: #F80;
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: #000;
filter: alpha(opacity=40);
opacity: 0.4;
}
#slider .text {
position: absolute;
top: 1%;
top: 100%;
color: #FFF;
font-family: verdana, arial, Helvetica, sans-serif;
font-size: 0.9em;
text-align: justify;
width: 470px;
left: 10px;
}
#slider .diapo {
position: absolute;
filter: alpha(opacity=100);
opacity: 1;
visibility: hidden;
}
</style>
<script type="text/javascript">
/* ==== slider nameSpace ==== */
var slider = function() {
/* ==== private methods ==== */
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;
}
/* ==== Slider Constructor ==== */
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;
/* ==== on mouse out event ==== */
this.oc.onmouseout = function () {
this.parent.mouseout();
return false;
}
}
Slider.prototype = {
/* ==== animation loop ==== */
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();
},
/* ==== resize  ==== */
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);
},
/* ==== rest  ==== */
mouseout : function () {
this.over      = false;
setOpacity(this.view.img, this.oP);
}
}
/* ==== Slide Constructor ==== */
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', 'diapo');
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);
/* ==== mouse events ==== */
this.obj.parent = this;
this.obj.onmouseover = function() {
this.parent.over();
return false;
}
}
Slide.prototype = {
/* ==== target positions ==== */
calc : function() {
var that = this.parent;
// left slides
for (var i = 0; i <= this.N; i++) {
that.slides[i].x1 = i * that.Z;
}
// right slides
for (var i = this.N + 1; i < that.NF; i++) {
that.slides[i].x1 = that.wh - (that.NF - i) * that.Z;
}
},
/* ==== HTML animation : move slides ==== */
move : function() {
var that = this.parent;
var s = (this.x1 - this.x0) / that.S;
/* ==== lateral slide ==== */
if (this.N && Math.abs(s) > .5) {
this.obj.style.left = Math.floor(this.x0 += s) + 'px';
}
/* ==== vertical text ==== */
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) {
/* ==== adjust speed ==== */
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;
}
}
},
/* ==== light ==== */
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);
}
}
/* ==== public method - script initialization ==== */
return {
init : function() {
// create instances of sliders here
// parameters : HTMLcontainer name, speed (2 fast - 20 slow), Horizontal ratio, vertical text ratio, opacity
this.s1 = new Slider("slider", 12, 1.84/3, 1/3.2, 70);
setInterval("slider.s1.run();", 16);
}
}
}();
function aa(){
delete slider.s1;  
}

</script>
</head><body><div id="center">
<div id="slider">
<div onclick="aa();" class="slide">
<img class="diapo" src="images/08081201001.jpg" alt="">
<div class="text">
<span class="title">The best</span> The offspring of a customized 
orbiter, O飇ostem arose as the best balanced home for our plans. 
So we submitted to its conditions. </div>
</div>
<div class="slide">
<img class="diapo" src="images/08081201002.jpg" alt="">
<div class="text">
<span class="title">Prototype</span> O飇ostem&#39;s deep impulse flow 
is selectively regulated by a molecule originated in the prototype 
model, that creates its own variational principles, as oriented 
by the first local generation of terminable androids. </div>
</div>
<div class="slide">
<img class="diapo" src="images/08081201003.jpg" alt="">
<div class="text">
<span class="title">Has been reduced</span> Paired hosts come out 
nicely after only two cycles now. Their size has been reduced to 
a half the original as planned, and indeed they show an evolutionary 
advantage in the process of fixing self-generated instructions. 
Plus, they are beautiful. </div>
</div>
</div>
<script type="text/javascript">
/* ==== start script ==== */
slider.init();
</script></body></html>以上是JSCODE的一图片展示特效,我想点击第一张图片的时候,彻底地销毁由JS创造出的所有对象,我在函数aa()写的方法还是残留很多东西。希望高手帮帮忙,在线等至晚上12点。

解决方案 »

  1.   

    销毁对象?
    直接slider.s1=null;就OK了
      

  2.   


    你拷贝我代码运行看看,我是要销毁黑色框架里面显示所有的图片,及执行以上JS代码中所有占用内存和CPU,物理空间的所有东西。(简单来说,效果等于把所以JS代码去掉,重新运行页面一样)因为我要重新用几张图片替换,而替换前要销毁所有占资源的东西。
      

  3.   

    也运行了,还是不太明白你的意思,你可以刷新下试试是否你要的效果
    function aa(){ 
    document.location.reload();  
      

  4.   

    不是刷新,比如展示了5张图片,然后我点击第一张图片后,用slider1另外5张图片替换原来五张图片,原来我是这样写的,但是发觉对象清除不干净,仍然有很多东西占着内存。
    aa(){ 
    alert(delete slider.s1);
    var a=document.getElementById("slider");
    var b=document.getElementById("slider1");
    a.innerHTML=b.innerHTML;
    slider.init();
    }
      

  5.   

    delete slider.s1只删除了slider.s1这个自建对象并没有删除里面生成的已经在DOM树里的DOM对象
    LZ可以在生成DOM的时候把大对象放入一个cache里面到时候在cache里逐个从DOM树里销毁就可以了
      

  6.   


    var cache =[];function createElem(tagName){
    var node = document.createElement(tagName);
    cache.push(node);
    return node;
    }function destoryCaches(){
    for (var i = 0; i < cache.length; i++) {
    var node = cache[i];
    if (node.parentNode) node.parentNode.removeChild(node);
    delete node;
    }
    }// 创建dom的时候这样写
    var img1 = createElem('img'); //这里产生的img就自动放到cache里了
    destoryCaches(); // 销毁所有被cache的对象
      

  7.   

    修正一下function destoryCaches(){
    for (var i = 0; i < cache.length; i++) {
    var node = cache[i];
    if (node.parentNode) node.parentNode.removeChild(node);
    delete node;
    }
    cache.length = 0;
    }