登录  /  注册
javascript - 百度钱包视差滚动是怎么做出来的?
阿神
阿神 2017-04-10 14:45:25
[JavaScript讨论组]

百度钱包:
http://1.baidu.com/?invite_code=KMC5HS3E&qq-pf-to=pcqq.group

想知道 Js 是怎么样写的!然后自己仿作一个!

阿神
阿神

闭关修行中......

全部回复(4)
巴扎黑

用純 CSS 實現了一個:https://bumfo.github.io/parallax.html

鑑於使用了 position: sticky,目前只支持 Firefox/Safari。其它瀏覽器需要 JS 的 polyfill。

polyfill 如下:

var Sticky = function() {
    var s = [], 
        support = (function testSupport() {
        var p = document.createElement("p");
        var st = ["sticky", "-webkit-sticky"];

        return st.some(function(x) {
            p.style.position = x;

            return p.style.position === x;
        });
    }());

    function Sticky(o) {
        var self = this;

        s.push(self);

        self[0] = o;

        var placeholder = document.createElement("p");
        self.placeholder = placeholder;
        placeholder.classList.add("placeholder");

        self.fixed = false;

        self.posit = posit;

        function posit() {
            var rect;

            if (self.fixed) {
                rect = placeholder.getBoundingClientRect();

                self.staticTop = rect.top + window.pageYOffset;
            } else {
                rect = o.getBoundingClientRect();

                self.staticTop = rect.top + window.pageYOffset;
            }
        }

        posit();
    }

    Sticky.prototype.stick = function() {
        if (support)
            return;

        var o = this[0], 
            top = this.staticTop;

        var placeholder = this.placeholder, fixed = this.fixed;

        console.log(top);

        if (top > window.pageYOffset && fixed) {
            placeholder.parentNode.removeChild(placeholder);

            o.classList.remove("sticky");

            fixed = false;
        } else if (top <= window.pageYOffset && !fixed) {
            o.parentNode.insertBefore(placeholder, o);

            o.classList.add("sticky");

            fixed = true;
        }

        this.fixed = fixed;
    };

    if (!support) {
        window.addEventListener("scroll", function() {
            s.forEach(function(x) { x.stick(); });
        });

        window.addEventListener("resize", function() {
            s.forEach(function(x) { x.posit(); });
            s.forEach(function(x) { x.stick(); });
        });
    } else {
        console.log("support");
    }


    return Sticky;
}();
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号