V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
dyniao

分享一个新鲜代码,用 Javascript 和 CSS3 来增加页面滚动的效果

  •  
  •   dyniao · Dec 17, 2015 · 3533 views
    This topic created in 3794 days ago, the information mentioned may be changed or developed.

    先上示例动图

    示例动图

    熟肉核心代码

    scroll(function(direction) {
    if (direction == "up") {
    jQuery(".scrollcircle").addClass("scroll_up");
    } else {
    jQuery(".scrollcircle").addClass("scroll_down");
    }
    });
    var cssend = document.querySelector(".scrollcircle");
    cssend.addEventListener("webkitAnimationEnd", function() {
    jQuery(".scrollcircle").removeClass("scroll_up").removeClass("scroll_down");
    }, false);
    function scroll(fn) {
    var beforeScrollTop = document.body.scrollTop, fn = fn || function() {
    };
    window.addEventListener("scroll", function() {
    var afterScrollTop = document.body.scrollTop, delta = afterScrollTop - beforeScrollTop;
    if (delta === 0) {
    return false;
    }
    fn(delta > 0 ? "down" : "up");
    beforeScrollTop = afterScrollTop;
    }, false);
    };

    全部代码详见

    http://www.dyniao.com/use-javascript-and-css3-add-scroll-effect/

    Supplement 1  ·  Dec 18, 2015

    目前这样的配置确实没有什么意义,主要就是看着玩的。

    但是可以将这个做成有意义的。
    比如弄个右下角的菜单,鼠标指向展开什么的,藏几个链接在里边。

    多加了一个判断,这样两个浏览器都能获取到滚动条的位置了。

    document.documentElement.scrollTop || document.body.scrollTop

    改成非 jq 版的 js 代码,便于操作,将 class 改成 id 了,或者用 html5 的 document.querySelector 。
    function g(e){return document.getElementById(e);}
    //function g(e){return document.querySelector(e);}
    //用法 g(".css") 用着跟 jquery 选择器一样。
    scroll(function(direction) {
    if(direction=='up')
    {
    g("scrollcircle").className+='scroll_up ';}
    else {
    g("scrollcircle").className+='scroll_down ';

    }
    });
    var anim = g("scrollcircle");
    anim.addEventListener('animationend', function(){anim.className="";}, false);
    function scroll(fn) {
    var beforeScrollTop = document.documentElement.scrollTop || document.body.scrollTop,fn = fn || function() {};
    window.addEventListener("scroll", function() {var afterScrollTop = document.documentElement.scrollTop || document.body.scrollTop, delta = afterScrollTop - beforeScrollTop;if( delta === 0 ) return false;fn( delta > 0 ? "down" : "up" );beforeScrollTop = afterScrollTop;
    }, false);
    }

    13 replies    2015-12-21 18:14:01 +08:00
    chemzqm
        1
    chemzqm  
       Dec 17, 2015
    老实说,看着有点累,用户浏览网页通常是为了浏览内容,被特效干扰体验不友好
    kirainmoe
        2
    kirainmoe  
       Dec 17, 2015
    mark
    zhe13
        3
    zhe13  
       Dec 17, 2015
    求无 JQuery 版本
    oott123
        4
    oott123  
       Dec 17, 2015
    成品代码为啥不给一个页面让用户体验一下……
    说实话看动图我完全没看懂这是个啥。
    oott123
        5
    oott123  
       Dec 17, 2015
    @oott123 好吧,没注意楼主网站上就有一个。因为我用的 Firefox 所以这玩意儿并不会动,而且屏幕稍微大一旦就根本留意不到……
    50vip
        6
    50vip  
       Dec 17, 2015
    代码不错,完全可以改成没有 jq 的~
    bk201
        7
    bk201  
       Dec 17, 2015
    如果能让左下原盘可以手动滚动,使得滚动条滚动就是一个不错的轮子了。
    botao1
        8
    botao1  
       Dec 17, 2015
    这存在的意义是什么?
    flowfire
        9
    flowfire  
       Dec 17, 2015
    跳帧现象。。。
    Balthild
        10
    Balthild  
       Dec 18, 2015 via Android
    手机上巨卡
    dyniao
        11
    dyniao  
    OP
       Dec 18, 2015
    @Balthild 应该是硬件渲染 css3 慢导致的吧。具体原因不是很明白。
    dyniao
        12
    dyniao  
    OP
       Dec 21, 2015
    @50vip
    @zhe13
    已经无 jq 了
    50vip
        13
    50vip  
       Dec 21, 2015
    @dyniao github 地址呢?大小有多大啊?需要我我给你提供 cdn 地址不~
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4051 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 10:22 · PVG 18:22 · LAX 03:22 · JFK 06:22
    ♥ Do have faith in what you're doing.