首页 新闻 会员 周边

有大神帮忙解释下这个弹性动画的手风琴图片相册特效的js代码吗

0
悬赏园豆:20 [已解决问题] 解决于 2017-05-09 09:55
复制代码
html:

<div id="slider">   <div class="slide">   <img class="diapo" src="images/sf10.jpg" alt=""> <div class="text"> <span class="title">The best</span> The offspri </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(); }, 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', '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); 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; } }, 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() { this.s1 = new Slider("slider", 12, 1.84/3, 1/3.2, 70); setInterval("slider.s1.run();", 16); } } }(); </script> <script type="text/javascript"> slider.init(); </script>
复制代码
Yhspehy的主页 Yhspehy | 菜鸟二级 | 园豆:232
提问于:2016-12-07 18:52
< >
分享
最佳答案
0

已毫无压力看懂。 

Yhspehy | 菜鸟二级 |园豆:232 | 2017-04-10 17:56
其他回答(1)
0

太长了。

<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();
        },
        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', '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);
        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;
            }
        },
        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() {
            this.s1 = new Slider("slider", 12, 1.84/3, 1/3.2, 70);
            setInterval("slider.s1.run();", 16);
        }
    }
}(); 


</script>

<script type="text/javascript">  
slider.init();
    </script>  
收获园豆:20
jasondyoung | 园豆:424 (菜鸟二级) | 2016-12-11 13:51

是有点长哈0.0

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-11 13:58

@Yhspehy: 不好意思,手贱复制了一份,没消除。

你可以先补一下基础,再来看这些,就简单多了。

支持(0) 反对(0) jasondyoung | 园豆:424 (菜鸟二级) | 2016-12-11 14:13

@jasondyoung: 好的

支持(0) 反对(0) Yhspehy | 园豆:232 (菜鸟二级) | 2016-12-11 14:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册