This commit is contained in:
NianBroken
2024-07-27 16:52:46 +08:00
parent 77dfaff474
commit 85877a144c
4 changed files with 1771 additions and 1299 deletions

View File

@@ -1,75 +1,37 @@
<div align="center">
# 个人樱花引导页
注意:
此源码是基于 [Dimension](https://html5up.net/dimension "Dimension") 的二次修改
Demo 1[https://nianbroken.github.io/Personal_Sakura_Guide_Page/](https://nianbroken.github.io/Personal_Sakura_Guide_Page/ "https://nianbroken.github.io/Personal_Sakura_Guide_Page/")
<img src="https://blog.nianbroken.top/NianBrokenStorage/FileStorage/7/03.png" alt="主界面" style="zoom:35%;" />
Demo 2[https://www.nianbroken.top/](https://www.nianbroken.top/ "https://www.nianbroken.top/")
</div>
------------
## 预览
### 更新日志:
- [https://nianbroken.github.io/Personal_Sakura_Guide_Page/](https://nianbroken.github.io/Personal_Sakura_Guide_Page/)
#### 1.2 - 2022年1月30日
---
- 更正错别字“途径”→“途经”(她只是**途经**我留下了星火 而我却任凭它焚烧了我整个荒原)
- 修复页面中头像周围出现两个圆框
- 新增版权信息的年份支持自动更新
- 底部新增一条文案
- 修复其他Bug
## 配置修改
收款码:`money_receiving_QR_code``index.html`
## 许可证
#### 1.1 - 2021年7月21日
`Copyright © 2022 NianBroken. All rights reserved.`
- 修复 **Svg 无法显示** 的问题
- 增加 **Meta Description** 优化SEO
- 增加 **图像的 Alt 属性** 优化SEO
- 增加 **Meta Language 标记** 优化SEO
- 增加 **万能收款码** (需自行修改 `\money_receiving_QR_code\index.html` 相关参数)
- 此版本可通过Bing、Google搜索引擎的质量检查
本项目采用 [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) 许可证。简而言之,你可以自由使用、修改和分享本项目的代码,但前提是在其衍生作品中必须保留原始许可证和版权信息,并且必须以相同的许可证发布所有修改过的代码。
------------
## 特别感谢
### 修改内容:
- [dimension](https://html5up.net/dimension)
1. 将页面内头像改为本地头像
2. 将原本的背景替换为动态樱花背景(参考自 [fwxiaohan.github.io](https://github.com/fwxiaohan/fwxiaohan.github.io "fwxiaohan.github.io")
3. 去除`<li>`标签的锚点链接,改为文本链接
4. 去除超链接下方的横线
- [fwxiaohan](fwxiaohan.github.io)
main.css内的
## 最便宜的 VPN
```css
border-bottom: dotted 1px rgba(255, 255, 255, 0.5);
```
[https://nianbroken.github.io/Great-Firewall/](https://nianbroken.github.io/Great-Firewall/)
5. 去除页面中间的黑色块块
## 其他
main.css内的
```css
background-image: -webkit-radial-gradient(rgba(0, 0, 0, 0.25) 25%, rgba(0, 0, 0, 0) 55%);
background-image: radial-gradient(rgba(0, 0, 0, 0.25) 25%, rgba(0, 0, 0, 0) 55%);
```
6. 增加显示访问者IP地址调用 [https://pv.sohu.com/cityjson?ie=utf-8](https://pv.sohu.com/cityjson?ie=utf-8 "https://pv.sohu.com/cityjson?ie=utf-8") 接口)
------------
### Dimension与个人樱花引导页的对比
> #### Dimension
>
> [![Dimension](https://blog.nianbroken.top/usr/uploads/2021/05/2403737638.png "Dimension")](https://html5up.net/dimension "Dimension")
> #### 个人樱花引导页
>
> 静态图
> [![碎念个人樱花引导页静态图](https://blog.nianbroken.top/usr/uploads/2021/05/1477674244.png "碎念个人樱花引导页静态图")](https://www.nianbroken.top/ "碎念个人樱花引导页静态图")
> 动态图
> [![碎念个人樱花引导页动态图](https://blog.nianbroken.top/usr/uploads/2021/05/3974157131.gif "碎念个人樱花引导页动态图")](https://www.nianbroken.top/ "碎念个人樱花引导页动态图")
由于Gif较大可能加载不出来或加载比较慢建议直接点击图片跳转至演示站查看。
欢迎提交 `Issues``Pull requests`

View File

@@ -28,10 +28,12 @@
</div>
<nav>
<ul>
<li> <a target="_blank" href="http://blog.nianbroken.top/">碎念博客</a></li>
<li> <a target="_blank" href="http://rane.nianbroken.top/">燃鹅助手</a></li>
<li> <a target="_blank" href="http://baidu.nianbroken.top/">帮你百度</a></li>
<li> <a target="_blank" href="http://pan.nianbroken.top/">碎念云盘</a></li>
<li><a target="_blank" href="https://eugnaa.eu-gov.eu.org/">EUGNAA</a></li>
<li><a target="_blank" href="https://blog.nianbroken.top/">碎念博客</a></li>
<li><a target="_blank" href="https://chat.nianbroken.top/">灵巧AI</a></li>
<li><a target="_blank" href="https://pan.nianbroken.top/">碎念云盘</a></li>
<li><a target="_blank" href="https://url.nianbroken.top/">短链生成</a></li>
<li><a target="_blank" href="https://baidu.nianbroken.top/">帮你百度</a></li>
<li><a target="_blank" href="https://fireworks.nianbroken.top/">烟花模拟</a></li>
<!--<li><a href="#elements">Elements</a></li>-->
</ul>
@@ -39,21 +41,26 @@
</header>
<!-- Footer -->
<footer id="footer">
<p class="copyright">您的IP<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script><script type="text/javascript">document.write(returnCitySN["cip"])</script></p>
<p class="copyright"><script>
<p class="copyright">
您的IP
<script src="https://pv.sohu.com/cityjson?ie=utf-8"></script>
<script type="text/javascript">
document.write(returnCitySN["cip"]);
</script>
</p>
<p class="copyright">
<script>
var mydate = new Date();
document.writeln("Copyright&nbsp;&copy;&nbsp;2021 - "+mydate.getFullYear()+'&nbsp;碎念_Nian<br />All&nbsp;Rights&nbsp;Reserved');</script></p>
document.writeln("Copyright&nbsp;&copy;&nbsp;2021 - " + mydate.getFullYear() + "&nbsp;碎念_Nian<br />All&nbsp;Rights&nbsp;Reserved");
</script>
</p>
<p class="copyright">你在阳光下盛放 而我在阴郁的天空下自得其乐</p>
<p class="copyright"> <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&amp;uin=2971802058&amp;site=qq&amp;menu=yes"> <img src="images\svg\qq.svg" width="30" alt="QQ" title="QQ" />&nbsp;&nbsp;</a> <a target="_blank" href="mailto:suinian666@gmail.com"> <img src="images\svg\mail.svg" width="30" alt="Mail" title="Mail" />&nbsp;&nbsp;</a> <a target="_blank" href="/money_receiving_QR_code"> <img src="images\svg\money_receiving_QR_code.svg" width="30" alt="给我打钱" title="给我打钱" />&nbsp;&nbsp;</a> <a target="_blank" href="https://github.com/nianbroken"> <img src="images\svg\github.svg" width="30" alt="Github" title="Github" />&nbsp;&nbsp;</a> <a target="_blank" href="https://gitee.com/nianbroken"> <img src="images\svg\gitee.svg" width="30" alt="Gitee" title="Gitee" />&nbsp;&nbsp;</a> <a target="_blank" href="http://www.coolapk.com/u/1315644"> <img src="images\svg\coolapk.svg" width="30" alt="Coolapk" title="Coolapk" /></a> </p>
<p class="copyright">
<a target="_blank" href="http://wpa.qq.com/msgrd?v=3&amp;uin=2971802058&amp;site=qq&amp;menu=yes"> <img src="images\svg\qq.svg" width="30" alt="QQ" title="QQ" />&nbsp;&nbsp;</a> <a target="_blank" href="mailto:suinian666@gmail.com"> <img src="images\svg\mail.svg" width="30" alt="Mail" title="Mail" />&nbsp;&nbsp;</a> <a target="_blank" href="/money_receiving_QR_code"> <img src="images\svg\money_receiving_QR_code.svg" width="30" alt="给我打钱" title="给我打钱" />&nbsp;&nbsp;</a> <a target="_blank" href="https://github.com/nianbroken"> <img src="images\svg\github.svg" width="30" alt="Github" title="Github" />&nbsp;&nbsp;</a> <a target="_blank" href="https://gitee.com/nianbroken"> <img src="images\svg\gitee.svg" width="30" alt="Gitee" title="Gitee" />&nbsp;&nbsp;</a> <a target="_blank" href="http://www.coolapk.com/u/1315644"> <img src="images\svg\coolapk.svg" width="30" alt="Coolapk" title="Coolapk" /></a>
</p>
</footer>
</div>
<canvas id="sakura" style="z-index: 2;
position: fixed;
left: 0;
top: 0;
height: 100vh;
width: 100vw;">
</canvas>
<canvas id="sakura" style="z-index: 2; position: fixed; left: 0; top: 0; height: 100vh; width: 100vw"> </canvas>
<!-- BG -->
<!-- <div id="bg"> -->
<!-- Scripts -->
@@ -62,7 +69,12 @@
<script src="assets/js/breakpoints.min.js"></script>
<script src="assets/js/util.js"></script>
<script src="assets/js/main.js"></script>
<style>canvas { padding:0; margin:0; }</style>
<style>
canvas {
padding: 0;
margin: 0;
}
</style>
<!-- sakura shader -->
<script id="sakura_point_vsh" type="x-shader/x_vertex">
uniform mat4 uProjection;
@@ -354,7 +366,7 @@ void main(void) {
var Vector3 = {};
var Matrix44 = {};
Vector3.create = function (x, y, z) {
return {'x':x, 'y':y, 'z':z};
return { x: x, y: y, z: z };
};
Vector3.dot = function (v0, v1) {
return v0.x * v1.x + v0.y * v1.y + v0.z * v1.z;
@@ -378,8 +390,7 @@ Vector3.arrayForm = function(v) {
v.array[0] = v.x;
v.array[1] = v.y;
v.array[2] = v.z;
}
else {
} else {
v.array = new Float32Array([v.x, v.y, v.z]);
}
return v.array;
@@ -388,16 +399,16 @@ Matrix44.createIdentity = function () {
return new Float32Array([1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0]);
};
Matrix44.loadProjection = function (m, aspect, vdeg, near, far) {
var h = near * Math.tan(vdeg * Math.PI / 180.0 * 0.5) * 2.0;
var h = near * Math.tan(((vdeg * Math.PI) / 180.0) * 0.5) * 2.0;
var w = h * aspect;
m[0] = 2.0 * near / w;
m[0] = (2.0 * near) / w;
m[1] = 0.0;
m[2] = 0.0;
m[3] = 0.0;
m[4] = 0.0;
m[5] = 2.0 * near / h;
m[5] = (2.0 * near) / h;
m[6] = 0.0;
m[7] = 0.0;
@@ -408,7 +419,7 @@ Matrix44.loadProjection = function (m, aspect, vdeg, near, far) {
m[12] = 0.0;
m[13] = 0.0;
m[14] = -2.0 * far * near / (far - near);
m[14] = (-2.0 * far * near) / (far - near);
m[15] = 0.0;
};
Matrix44.loadLookAt = function (m, vpos, vlook, vup) {
@@ -444,20 +455,22 @@ Matrix44.loadLookAt = function (m, vpos, vlook, vup) {
//
var timeInfo = {
'start':0, 'prev':0, // Date
'delta':0, 'elapsed':0 // Number(sec)
start: 0,
prev: 0, // Date
delta: 0,
elapsed: 0, // Number(sec)
};
//
var gl;
var renderSpec = {
'width':0,
'height':0,
'aspect':1,
'array':new Float32Array(3),
'halfWidth':0,
'halfHeight':0,
'halfArray':new Float32Array(3)
width: 0,
height: 0,
aspect: 1,
array: new Float32Array(3),
halfWidth: 0,
halfHeight: 0,
halfArray: new Float32Array(3),
// and some render targets. see setViewport()
};
renderSpec.setSize = function (w, h) {
@@ -483,10 +496,10 @@ function deleteRenderTarget(rt) {
function createRenderTarget(w, h) {
var ret = {
'width':w,
'height':h,
'sizeArray':new Float32Array([w, h, w / h]),
'dtxArray':new Float32Array([1.0 / w, 1.0 / h])
width: w,
height: h,
sizeArray: new Float32Array([w, h, w / h]),
dtxArray: new Float32Array([1.0 / w, 1.0 / h]),
};
ret.frameBuffer = gl.createFramebuffer();
ret.renderBuffer = gl.createRenderbuffer();
@@ -571,29 +584,29 @@ function createShader(vtxsrc, frgsrc, uniformlist, attrlist) {
function useShader(prog) {
gl.useProgram(prog);
for (var attr in prog.attributes) {
gl.enableVertexAttribArray(prog.attributes[attr]);;
gl.enableVertexAttribArray(prog.attributes[attr]);
}
}
function unuseShader(prog) {
for (var attr in prog.attributes) {
gl.disableVertexAttribArray(prog.attributes[attr]);;
gl.disableVertexAttribArray(prog.attributes[attr]);
}
gl.useProgram(null);
}
/////
var projection = {
'angle':60,
'nearfar':new Float32Array([0.1, 100.0]),
'matrix':Matrix44.createIdentity()
angle: 60,
nearfar: new Float32Array([0.1, 100.0]),
matrix: Matrix44.createIdentity(),
};
var camera = {
'position':Vector3.create(0, 0, 100),
'lookat':Vector3.create(0, 0, 0),
'up':Vector3.create(0, 1, 0),
'dof':Vector3.create(10.0, 4.0, 8.0),
'matrix':Matrix44.createIdentity()
position: Vector3.create(0, 0, 100),
lookat: Vector3.create(0, 0, 0),
up: Vector3.create(0, 1, 0),
dof: Vector3.create(10.0, 4.0, 8.0),
matrix: Matrix44.createIdentity(),
};
var pointFlower = {};
@@ -651,16 +664,12 @@ BlossomParticle.prototype.update = function (dt, et) {
function createPointFlowers() {
// get point sizes
var prm = gl.getParameter(gl.ALIASED_POINT_SIZE_RANGE);
renderSpec.pointSize = {'min':prm[0], 'max':prm[1]};
renderSpec.pointSize = { min: prm[0], max: prm[1] };
var vtxsrc = document.getElementById("sakura_point_vsh").textContent;
var frgsrc = document.getElementById("sakura_point_fsh").textContent;
pointFlower.program = createShader(
vtxsrc, frgsrc,
['uProjection', 'uModelview', 'uResolution', 'uOffset', 'uDOF', 'uFade'],
['aPosition', 'aEuler', 'aMisc']
);
pointFlower.program = createShader(vtxsrc, frgsrc, ["uProjection", "uModelview", "uResolution", "uOffset", "uDOF", "uFade"], ["aPosition", "aEuler", "aMisc"]);
useShader(pointFlower.program);
pointFlower.offset = new Float32Array([0.0, 0.0, 0.0]);
@@ -700,7 +709,9 @@ function initPointFlowers() {
var PI2 = Math.PI * 2.0;
var tmpv3 = Vector3.create(0, 0, 0);
var tmpv = 0;
var symmetryrand = function() {return (Math.random() * 2.0 - 1.0);};
var symmetryrand = function () {
return Math.random() * 2.0 - 1.0;
};
for (var i = 0; i < pointFlower.numFlowers; i++) {
var tmpprtcl = pointFlower.particles[i];
@@ -713,25 +724,13 @@ function initPointFlowers() {
tmpprtcl.setVelocity(tmpv3.x * tmpv, tmpv3.y * tmpv, tmpv3.z * tmpv);
//rotation
tmpprtcl.setRotation(
symmetryrand() * PI2 * 0.5,
symmetryrand() * PI2 * 0.5,
symmetryrand() * PI2 * 0.5
);
tmpprtcl.setRotation(symmetryrand() * PI2 * 0.5, symmetryrand() * PI2 * 0.5, symmetryrand() * PI2 * 0.5);
//position
tmpprtcl.setPosition(
symmetryrand() * pointFlower.area.x,
symmetryrand() * pointFlower.area.y,
symmetryrand() * pointFlower.area.z
);
tmpprtcl.setPosition(symmetryrand() * pointFlower.area.x, symmetryrand() * pointFlower.area.y, symmetryrand() * pointFlower.area.z);
//euler
tmpprtcl.setEulerAngles(
Math.random() * Math.PI * 2.0,
Math.random() * Math.PI * 2.0,
Math.random() * Math.PI * 2.0
);
tmpprtcl.setEulerAngles(Math.random() * Math.PI * 2.0, Math.random() * Math.PI * 2.0, Math.random() * Math.PI * 2.0);
//size
tmpprtcl.setSize(0.9 + Math.random() * 0.1);
@@ -747,8 +746,7 @@ function renderPointFlowers() {
//out of area
if (prt.position[cmp] > 0) {
prt.position[cmp] -= limit * 2.0;
}
else {
} else {
prt.position[cmp] += limit * 2.0;
}
}
@@ -772,14 +770,13 @@ function renderPointFlowers() {
prtcl.alpha = 1.0; //(pointFlower.area.z - prtcl.position[2]) * 0.5;
prtcl.zkey = (camera.matrix[2] * prtcl.position[0]
+ camera.matrix[6] * prtcl.position[1]
+ camera.matrix[10] * prtcl.position[2]
+ camera.matrix[14]);
prtcl.zkey = camera.matrix[2] * prtcl.position[0] + camera.matrix[6] * prtcl.position[1] + camera.matrix[10] * prtcl.position[2] + camera.matrix[14];
}
// sort
pointFlower.particles.sort(function(p0, p1){return p0.zkey - p1.zkey;});
pointFlower.particles.sort(function (p0, p1) {
return p0.zkey - p1.zkey;
});
// update data
var ipos = pointFlower.positionArrayOffset;
@@ -867,11 +864,11 @@ function renderPointFlowers() {
//common util
function createEffectProgram(vtxsrc, frgsrc, exunifs, exattrs) {
var ret = {};
var unifs = ['uResolution', 'uSrc', 'uDelta'];
var unifs = ["uResolution", "uSrc", "uDelta"];
if (exunifs) {
unifs = unifs.concat(exunifs);
}
var attrs = ['aPosition'];
var attrs = ["aPosition"];
if (exattrs) {
attrs = attrs.concat(exattrs);
}
@@ -879,12 +876,7 @@ function createEffectProgram(vtxsrc, frgsrc, exunifs, exattrs) {
ret.program = createShader(vtxsrc, frgsrc, unifs, attrs);
useShader(ret.program);
ret.dataArray = new Float32Array([
-1.0, -1.0,
1.0, -1.0,
-1.0, 1.0,
1.0, 1.0
]);
ret.dataArray = new Float32Array([-1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0]);
ret.buffer = gl.createBuffer();
gl.bindBuffer(gl.ARRAY_BUFFER, ret.buffer);
gl.bufferData(gl.ARRAY_BUFFER, ret.dataArray, gl.STATIC_DRAW);
@@ -925,14 +917,13 @@ function unuseEffect(fxobj) {
var effectLib = {};
function createEffectLib() {
var vtxsrc, frgsrc;
//common
var cmnvtxsrc = document.getElementById("fx_common_vsh").textContent;
//background
frgsrc = document.getElementById("bg_fsh").textContent;
effectLib.sceneBg = createEffectProgram(cmnvtxsrc, frgsrc, ['uTimes'], null);
effectLib.sceneBg = createEffectProgram(cmnvtxsrc, frgsrc, ["uTimes"], null);
// make brightpixels buffer
frgsrc = document.getElementById("fx_brightbuf_fsh").textContent;
@@ -940,12 +931,12 @@ function createEffectLib() {
// direction blur
frgsrc = document.getElementById("fx_dirblur_r4_fsh").textContent;
effectLib.dirBlur = createEffectProgram(cmnvtxsrc, frgsrc, ['uBlurDir'], null);
effectLib.dirBlur = createEffectProgram(cmnvtxsrc, frgsrc, ["uBlurDir"], null);
//final composite
vtxsrc = document.getElementById("pp_final_vsh").textContent;
frgsrc = document.getElementById("pp_final_fsh").textContent;
effectLib.finalComp = createEffectProgram(vtxsrc, frgsrc, ['uBloom'], null);
effectLib.finalComp = createEffectProgram(vtxsrc, frgsrc, ["uBloom"], null);
}
// background
@@ -1042,7 +1033,7 @@ function initScene() {
//camera.position.z = 17.320508;
camera.position.z = pointFlower.area.z + projection.nearfar[0];
projection.angle = Math.atan2(pointFlower.area.y, camera.position.z + pointFlower.area.z) * 180.0 / Math.PI * 2.0;
projection.angle = ((Math.atan2(pointFlower.area.y, camera.position.z + pointFlower.area.z) * 180.0) / Math.PI) * 2.0;
Matrix44.loadProjection(projection.matrix, renderSpec.aspect, projection.angle, projection.nearfar[0], projection.nearfar[1]);
}
@@ -1083,11 +1074,11 @@ function setViewports() {
if (rt) deleteRenderTarget(rt);
renderSpec[rtname] = createRenderTarget(rtw, rth);
};
rtfunc('mainRT', renderSpec.width, renderSpec.height);
rtfunc('wFullRT0', renderSpec.width, renderSpec.height);
rtfunc('wFullRT1', renderSpec.width, renderSpec.height);
rtfunc('wHalfRT0', renderSpec.halfWidth, renderSpec.halfHeight);
rtfunc('wHalfRT1', renderSpec.halfWidth, renderSpec.halfHeight);
rtfunc("mainRT", renderSpec.width, renderSpec.height);
rtfunc("wFullRT0", renderSpec.width, renderSpec.height);
rtfunc("wFullRT1", renderSpec.width, renderSpec.height);
rtfunc("wHalfRT0", renderSpec.halfWidth, renderSpec.halfHeight);
rtfunc("wHalfRT1", renderSpec.halfWidth, renderSpec.halfHeight);
}
function render() {
@@ -1126,18 +1117,18 @@ function makeCanvasFullScreen(canvas) {
canvas.height = fullh;
}
window.addEventListener('load', function(e) {
window.addEventListener("load", function (e) {
var canvas = document.getElementById("sakura");
try {
makeCanvasFullScreen(canvas);
gl = canvas.getContext('experimental-webgl');
gl = canvas.getContext("experimental-webgl");
} catch (e) {
alert("WebGL not supported." + e);
console.error(e);
return;
}
window.addEventListener('resize', onResize);
window.addEventListener("resize", onResize);
setViewports();
createScene();
@@ -1150,8 +1141,16 @@ window.addEventListener('load', function(e) {
//set window.requestAnimationFrame
(function (w, r) {
w['r'+r] = w['r'+r] || w['webkitR'+r] || w['mozR'+r] || w['msR'+r] || w['oR'+r] || function(c){ w.setTimeout(c, 1000 / 60); };
})(window, 'equestAnimationFrame');
w["r" + r] =
w["r" + r] ||
w["webkitR" + r] ||
w["mozR" + r] ||
w["msR" + r] ||
w["oR" + r] ||
function (c) {
w.setTimeout(c, 1000 / 60);
};
})(window, "equestAnimationFrame");
</script>
</body>
</html>

File diff suppressed because one or more lines are too long

8
nianbroken.txt Normal file
View File

@@ -0,0 +1,8 @@
主页https://nianbroken.top
QQ2971802058
微信NianBroken
Gmailsuinian666@gmail.com
捐赠https://pay.nianbroken.top/
Githubhttps://github.com/nianbroken
欧盟全球网络加速协会https://eugnaa.eu-gov.eu.org/
最便宜的VPNhttps://eugnaa.eu-gov.eu.org/