美文网首页
使用skrollr.js实现简单的滚动视差网站

使用skrollr.js实现简单的滚动视差网站

作者: 卡杰 | 来源:发表于2018-06-04 20:28 被阅读280次

    前言

    最近使用滚动视差建设广告页面成为了潮流。那么也让我紧跟这潮流fashion一下吧😄。
    简单的放一下我的Demo和Github
    Demo地址:http://parallaxdemo.kajie88.com/
    github地址:https://github.com/kajiecy/myParallaxSite
    skrollr.js作者的GitHub: https://github.com/Prinzhorn/skrollr

    正文

    废话不多说 直接切入正题吧,本片随笔使用skrollr.js来实现视差滚动。在决定选择使用它之前我也进行大量筛选与学习。最终根据文档的详细程度,语法的难易度等的对比选择使用skrollr.js了。

    如何使用

    首先 我们需要引入.js 文件 并对 skrollr对象进行初始化

    <script type="text/javascript" src="../dist/skrollr.min.js"></script>
    <script type="text/javascript">
        var s = skrollr.init();
    </script>
    

    一旦我们初始化成功 在html标签上会多出两个类 "skrollr skrollr-desktop"

    基础语法

    基础滚动

    skrollr的使用是非常简单的这归功于作者的js实力
    如果我们想让页面中的某个元素在滚动中 执行一些特效 我们只需要在div 上添加
    data- 属性即可;
    例:

        <div 
           data-0="background-color:rgb(0,0,255);" 
           data-500="background-color:rgb(255,0,0);"
           >测试文字</div>
    

    其中:
    data-0 滚动0时的样式
    data-500 滚动500时的样式
    实例:http://prinzhorn.github.io/skrollr/examples/docu/1.html

    有了这两个样式:skrollr就会自动处理从0滚动到500的央视过渡,类似与CSS中的transtions属性;

    过渡动画的抉择

    更为强大的是:我们可以根据样式名后加特效名来指定过渡特效。
    data-0="background-color[linear]:rgb(0,0,255);"
    过渡特效在源码中存在一下集中类型分别是:

    • begin
    • end
    • linear
    • quadratic
    • cubic
    • swing
    • sqrt
    • outCubic
    • bounce
    var easings = {
            begin: function() {
                return 0;
            },
            end: function() {
                return 1;
            },
            linear: function(p) {
                return p;
            },
            quadratic: function(p) {
                return p * p;
            },
            cubic: function(p) {
                return p * p * p;
            },
            swing: function(p) {
                return (-Math.cos(p * Math.PI) / 2) + 0.5;
            },
            sqrt: function(p) {
                return Math.sqrt(p);
            },
            outCubic: function(p) {
                return (Math.pow((p - 1), 3) + 1);
            },
            //see https://www.desmos.com/calculator/tbr20s8vd2 for how I did this
            bounce: function(p) {
                var a;
    
                if(p <= 0.5083) {
                    a = 3;
                } else if(p <= 0.8489) {
                    a = 9;
                } else if(p <= 0.96208) {
                    a = 27;
                } else if(p <= 0.99981) {
                    a = 91;
                } else {
                    return 1;
                }
    
                return 1 - Math.abs(3 * Math.cos(p * a * 1.028) / a);
            }
        };
    

    转换的方式我就不解释了直接丢个源码自己看吧😏
    当然您要是感觉这些动画太low。您也可以通过初始化实力时自定义过渡动画

    skrollr.init({
            easing: {
                sin: function(p) {
                    return (Math.sin(p * Math.PI * 2 - Math.PI/2) + 1) / 2;
                },
                cos: function(p) {
                    return (Math.cos(p * Math.PI * 2 - Math.PI/2) + 1) / 2;
                },
            }
        });
    

    动画的禁用

    我们可以使用 在样式前加!的方式来禁用动画了
    如:

    <div  data-0="background-image:!url(kitten1.jpg);" data-100="background-image:!url(kitten2.jpg)">
    </div>
    

    相对滚动模式

    滚动特效除了指定滚动固定的px之外,还有相对模式的概念,
    相对模式即为相对与某个锚点进行特效的变化
    语法为:

      --选择的元素
      data-anchor-target="#bacons" 
      --目标元素 顶部 在可视范围 底部 时的样式
      data-bottom-top="transform: translate3d(0px, -80%, 0px);" 
      --目标元素 底部 在可视范围 顶部 时的样式
      data-top-bottom="transform: translate3d(0px, 80%, 0px);"
    

    具体还有更多的类型作者也给出了图片说明:


    滚动模式图解

    以上就是 skrollr的最基本概念了,如果想了解更多请查阅作者文档。
    现在我们就可以实现一个简单的滚动视差的效果了。

    滚动视差的实现

    实现思路

    在正文区域我们先用div把想要显示图片的区域声明好。
    overflow:hidden 将超出div的部分隐藏掉。


    示例1.jpg 示例2.jpg

    然后我们将图片放入到这个div中 top设置为-50%将图片位置调整到 div的中间。


    示例3.jpg 示例4.jpg

    最后 我们通过上面 提到的相对滚动 监听div#div-view的位置 来对图片进行处理


    示例5.jpg
        <div class="" id="div-view" style='height: 50vh;width: 100%;background-color: #C6E746;overflow: hidden'>
            <img class="" src="images/kitteh1.jpg"
                 style="position: relative;width: 100vw;height: 100vh;top: -50%" alt=""
            data-anchor-target="#div-view"
            data-bottom-top="transform:translate3d(0px, -60%, 0px)"
            data-top-bottom="transform:translate3d(0px, 60%, 0px)"
            />
    

    动画效果为将图片的位置进行便宜就ok了。
    (上传不了gif图 演示地址:http://qiniu.kajie88.com/jdfw.gif)

    相关文章

      网友评论

          本文标题:使用skrollr.js实现简单的滚动视差网站

          本文链接:https://www.haomeiwen.com/subject/rafdsftx.html