zoukankan      html  css  js  c++  java
  • [JavaScript] 用JS制作博客页面背景随滚动渐变的效果

    用JS制作博客页面背景随滚动渐变的效果


    准备

    [x] 申请博客园的JS权限(如果你也想把它用在自己的博客园上)
    [x] 可能需要一些JS的基础知识(你可以打开w3school,然后就当自己准备好了)
    [x] 可能需要一些CSS基础知识(你需要知道颜色是怎样用16进制表示的)
    当然,你也可以复制下面的代码然后走人qwq……

    注意:如果你想要用在自己的博客园上,请注意博客园的不同模板对应的元素 class 也可能是不同的。

    代码

    首先,在“页首HTML代码”中新建一个div,放在最下面一层。这个div用来放渐变的背景颜色。

    <div id="backGround" style="position: fixed; 100%; height: 100%; top: 0; left: 0; background-color: #bff687; z-index: -1"></div>
    

    然后用js监听window.onscroll事件,记录一个cnt变量,每监听到一次,就给cnt加上1,然后用cnt生成当前颜色。

    至于颜色的生成方式你可以自己发明一个。我用了三个相位不同的sin函数生成R、G、B三个颜色的值。

    function getTitleValue(start, x){
            var ret = titleMax - 1 - rangeValue + Math.floor(rangeValue * Math.sin(start + x));
            return ret;
        }
    function getBackgroundColor(){
        var red = getBackgroundValue(0, cnt * 2 * PI / 256).toString(16);
        var green = getBackgroundValue(2 * PI / 3, cnt * 2 * PI / 256).toString(16);
        var blue = getBackgroundValue(4 * PI / 3, cnt * 2 * PI / 256).toString(16);
        return "#" + red + green + blue;
    }
    

    这里讲一下如何用js修改某个元素的颜色:

    function changeColor(){
        var backGround = document.getElementById("backGround");
        var titles = document.getElementsByClassName("postTitle2");
        var newTitleColor = getTilteColor();
        backGround.style.backgroundColor = getBackgroundColor();
        for(var i = 0; i < titles.length; i++)
            titles[i].style.color = newTitleColor;
        cnt = (cnt + 1) % 256;
    }
    

    getElementById,然后调用生成颜色的函数,生成了一个字符串,形如#aabbcc,代表颜色。然后用JS修改CSS。

    完整代码

    <div id="backGround" style="position: fixed; 100%; height: 100%; top: 0; left: 0; background-color: #bff687; z-index: -1"></div>
            
    <script>
        var cnt = 0, PI = Math.acos(-1);
        var rangeValue = 64, backgroundMax = 256, titleMax = 192;
        function getBackgroundValue(start, x){
            var ret = backgroundMax - 1 - rangeValue + Math.floor(rangeValue * Math.sin(start + x));
            return ret;
        }
        function getTitleValue(start, x){
            var ret = titleMax - 1 - rangeValue + Math.floor(rangeValue * Math.sin(start + x));
            return ret;
        }
        function getBackgroundColor(){
            var red = getBackgroundValue(0, cnt * 2 * PI / 256).toString(16);
            var green = getBackgroundValue(2 * PI / 3, cnt * 2 * PI / 256).toString(16);
            var blue = getBackgroundValue(4 * PI / 3, cnt * 2 * PI / 256).toString(16);
            return "#" + red + green + blue;
        }
        function getTilteColor(){
            var red = getTitleValue(0, cnt * 2 * PI / 256).toString(16);
            var green = getTitleValue(2 * PI / 3, cnt * 2 * PI / 256).toString(16);
            var blue = getTitleValue(4 * PI / 3, cnt * 2 * PI / 256).toString(16);
            return "#" + red + green + blue;
        }
        window.onload = window.onscroll = function changeColor(){
            var backGround = document.getElementById("backGround");
            var titles = document.getElementsByClassName("postTitle2");
            var newTitleColor = getTilteColor();
            backGround.style.backgroundColor = getBackgroundColor();
            for(var i = 0; i < titles.length; i++)
                titles[i].style.color = newTitleColor;
            cnt = (cnt + 1) % 256;
        }
    </script>
    
  • 相关阅读:
    Spring注解开发系列Ⅵ --- AOP&事务
    Spring注解开发系列Ⅴ --- 自动装配&Profile
    Spring注解开发系列Ⅲ --- 生命周期
    Spring注解开发系列Ⅱ --- 组件注册(下)
    .net Core在过滤器中获取 系统接口方法(以IMemoryCache 为例) 及HttpContext 获取系统接口
    【旧文章搬运】炉子给的SYSTEM_HANDLE_TYPE有点错误
    【旧文章搬运】超级无敌大炉子的LzOpenProcess
    【旧文章搬运】PE重定位表学习手记
    【旧文章搬运】ZwQuerySystemInformation枚举内核模块及简单应用
    【旧文章搬运】ZwQuerySystemInformation枚举进线程信息
  • 原文地址:https://www.cnblogs.com/aiyi2000/p/9865566.html
Copyright © 2011-2022 走看看