今天颓了一会,用JavaScript给我的博客园博客写了一个页面背景随滚动而渐变的效果,做完之后自我感觉良好……

下面就以我的博客园博客为例,介绍一下如何制作这个效果!


准备

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

——当然,你也可以复制下面的代码然后走人……

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

代码

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

<div id="backGround" style="position: fixed; width: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; width: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>

用JS制作博客页面背景随滚动渐变的效果的更多相关文章

  1. 原生js添加博客点击鼠标出小心心效果~~

    昨天刚申请成功JS权限,心血来潮想添加点东西,记得之前看到别人家博客首页点击鼠标的时候会出现炫酷的 “小心心”,自己也来搞一个.没有用jquery啥的框架,原生js写起来麻烦了点,不过主要是怕博客首页 ...

  2. 转载: 使用vue全家桶制作博客网站 HTML5 移动网站制作的好教程

    使用vue全家桶制作博客网站   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue. ...

  3. 使用react全家桶制作博客后台管理系统 网站PWA升级 移动端常见问题处理 循序渐进学.Net Core Web Api开发系列【4】:前端访问WebApi [Abp 源码分析]四、模块配置 [Abp 源码分析]三、依赖注入

    使用react全家桶制作博客后台管理系统   前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基 ...

  4. 一个基于Vue.js+Mongodb+Node.js的博客内容管理系统

    这个项目最初其实是fork别人的项目.当初想接触下mongodb数据库,找个例子学习下,后来改着改着就面目全非了.后台和数据库重构,前端增加了登录注册功能,仅保留了博客设置页面,但是也优化了. 一.功 ...

  5. 使用vuepress搭建GitHub pages静态博客页面

    vuepress官网 vuepress是尤大开发来写文档的静态页面.可以用Markdown 语法,并且也可以使用vue模块化的方式开发页面. vuepress-theme-reco 是另外的开发者开发 ...

  6. Confluence 6.15 博客页面(Blog Posts)宏参数

    参数是让你可以用来控制宏的格式和输出的选项.在 Confluence 存储格式或者 Wiki 标记(wikimarkup)中使用的参数名与在宏浏览器中使用的标签名是不同的,在下面我们将会用括号列出  ...

  7. Confluence 6.15 博客页面(Blog Posts)宏

    博客页面宏允许你 Confluence 页面中显示博客页面.通过单击博客的标题将会把你链接到博客页面中. 使用博客页面宏 为了将博客页面宏添加到页面中:  从编辑工具栏中,选择 插入(Insert)  ...

  8. 使用vue全家桶制作博客网站

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用vue全家桶制作的博客网站 概述 该项目是基于vue全家桶(vue.vue-router.vuex.v ...

  9. 使用react全家桶制作博客后台管理系统

    前面的话 笔者在做一个完整的博客上线项目,包括前台.后台.后端接口和服务器配置.本文将详细介绍使用react全家桶制作的博客后台管理系统 概述 该项目是基于react全家桶(React.React-r ...

随机推荐

  1. Docker服务器的图形显示方案

    问题描述:一般docker实操时都是作为服务器,以字符方式交互,非常不方便.本人尝试各种图形解决方案,最终找到完美方案. 最初本人尝试过VNC和SSH方式,最终被否定了.1, 本来docker服务器是 ...

  2. test zhenai

    web.Document.InvokeScript("eval",new string[]{"document.getElementById('passwordbt'). ...

  3. CS190.1x-ML_lab5_pca_student

    这次lab也是最后一次lab了,前面两次lab介绍了回归和分类,特别详细地介绍了线性回归和逻辑回归,这次的作业主要是非监督学习--降维,主要是PCA.数据集是神经科学的数据,来自于Ahrens Lab ...

  4. HTML5 之 FileReader 方法上传并读取文件

    原文地址:https://caochangkui.github.io/file-upload/ HTML5 的 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据 ...

  5. jvm系列(八):jvm知识点总览

    在江湖中要练就绝世武功必须内外兼备,精妙的招式和深厚的内功,武功的基础是内功.对于武功低(就像江南七怪)的人,招式更重要,因为他们不能靠内功直接去伤人,只能靠招式,利刃上优势来取胜了,但是练到高手之后 ...

  6. effective c++ 笔记 (45-48)

    //#45   运用成员函数模版接受所有兼容类型 { /*  1:当你使用智能指针的时候,会发生一个问题,想把一个子类的对象赋给基类的指针变得不可能了, 因为智能指针指定了的是基类的类型,而赋给它的是 ...

  7. node.js学习笔记(四)——EventEmitter

    error 事件 EventEmitter 定义了一个特殊的事件 error,它包含了错误的语义,我们在遇到异常的时候通常会触发 error 事件.当 error 被触发时,EventEmitter ...

  8. Reflux系列01:异步操作经验小结

    写在前面 在实际项目中,应用往往充斥着大量的异步操作,如ajax请求,定时器等.一旦应用涉及异步操作,代码便会变得复杂起来.在flux体系中,让人困惑的往往有几点: 异步操作应该在actions还是s ...

  9. Tortoisegit生成SSH密钥一次性输入密码

    一.找到Tortoisegit 的安装目录,进入bin目录下,找到puttygen.exe并打开,点击Generate按钮,会看到上面出现绿色滚动条,此时要不停移动鼠标,进度会比较快,完成后,就会看到 ...

  10. 谷歌算法研究员:我为什么钟爱PyTorch?

    老铁们好!我是一名前谷歌的算法研究员,处理深度学习相关项目已有三年经验,接下来会在平台上给大家分享一些深度学习,计算机视觉和统计机器学习的心得体会,当然了内推简历一定是收的.这篇文章,不想说太多学术的 ...