찾다

 >  Q&A  >  본문

javascript - 百度钱包视差滚动是怎么做出来的?

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

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

阿神阿神2823일 전951

모든 응답(4)나는 대답할 것이다

  • ringa_lee

    ringa_lee2017-04-10 14:47:25

    1. 布置好需要的图层,z-index 从小到大,可看页面上的 .product-item 元素的 style
    2. 每层的内部元素通过负 margin 来控制位置
    3. 监听 body 上的 mousewheel 事件,从 event.wheelDelta 可以获知正在往什么方向滚动,做相应的动画改变目标层的高度及内部元素的位置就好

    最好的学习方式还是打开开发者工具,然后一边交互一边观察 dom 的变化

    회신하다
    0
  • PHP中文网

    PHP中文网2017-04-10 14:47:25

    记得有一篇文章提过,这种设计方式是违反网页设计初衷,我个人也觉得有点这种感觉,本来是自由滚动的却被死死地固定了。偶尔用几个还行,用多了真的不是一种好趋势。

    说了这么多,给你个DEMO吧。以前找到的~

    http://www.thepetedesign.com/demos/onepage_scroll_demo.html#

    如果没错的话就是这种效果~

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-10 14:47:25

    用純 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;
    }();
    

    회신하다
    0
  • 阿神

    阿神2017-04-10 14:47:25

    百度最近好喜欢用fullpage.js,一般会配合animate.css使用

    회신하다
    0
  • 취소회신하다