“常温”前端网站框架(五)-- 网站声明【附源码】

开篇(请大家看完):此网站写给挚爱,后续页面还会慢慢更新,大家敬请期待~ ~ ~

此前端框架,主要侧重于前端页面的视觉效果和交互体验。通过运用各种前端技术和创意,精心打造了一系列引人入胜的页面特效,会为大家带来全新的浏览体验。

同时,我非常支持和鼓励大家对这个框架进行二次创作或修改。您可以根据自己的需求和喜好,对框架进行个性化的定制和扩展,以打造出更符合自己品味的页面效果。

但请注意,如果您打算将这个框架转发给其他人或用于其他场合,请务必注明原创来源。让我们一起维护一个良好的创作环境。

最后,轻舟会继续更新和完善这个前端页面特效框架,为大家带来更多有趣、实用的功能和效果。感谢您的支持和关注!

页面效果:整体色调背景采用柔和渐变的方式呈现,与主页面的“毒药水式”色彩搭配形成了强烈的对比;周边花瓣缓缓飘落到水面之上形成涟漪。整体给人一种温馨、浪漫的感觉,网页声明背景板犹如映衬在水中,给人一种飘渺之感,上面的四种按钮可以进行网页声明页面的切换
在这里插入图片描述
在这里插入图片描述

一:网站声明.html

<!DOCTYPE html>
<html lang="en" >
<head>

<meta NAME="Generator" CONTENT="EditPlus">
<meta NAME="Author" CONTENT="">
<meta NAME="Keywords" CONTENT="">
<meta NAME="Description" CONTENT="">
  <meta charset="UTF-8">
  <title>网站声明</title>
<link rel="stylesheet" href="CSS/声明.css">
<script type="text/javascript" src="JS/jquery-3.7.1.min.js"></script>

</head>
<body>
<div class="folder">
  <div class="tabs">
    <button class="tab active" onclick="openTab(event, 'tab-1')">
      <div><span>网站架构</span></div>
    </button>
    <button class="tab" onclick="openTab(event, 'tab-2')">
      <div><span>页面分配</span></div>
    </button>
    <button class="tab" onclick="openTab(event, 'tab-3')">
      <div><span>注意事项</span></div>
    </button>
    <button class="tab" onclick="openTab(event, 'tab-4')">
      <div><span>联系我们</span></div>
    </button>
  </div>
  <div class="content">
    <div class="content__inner" id="tab-1">
      <div class="page">
        <p>“常温”个人网站采用:
        <p><span style="margin-left: 2em;">HTML5:用于构建网站的基本结构。</span></p>
        <p><span style="margin-left: 2em;">CSS3:用于设置网站的样式和布局,包括响应式设计,确保网站在不同设备上都能良好显示。</span></p>
        <p><span style="margin-left: 2em;">JavaScript:增强网站的交互性和动态效果,增强用户体验,如图片轮播、按钮点击效果等。</span></p>
        <p><span style="margin-left: 2em;">echarts.js:用于图表类型的绘制(如:折线图、柱状图、饼状图、散点图、K线图、热力图等)</span></p>

</p>

      </div>
    </div>
    <div class="content__inner" id="tab-2">
      <div class="page">
        <p>本网站主要侧重于前端页面的视觉效果和交互体验。通过运用各种前端技术和创意,精心打造了一系列引人入胜的页面特效,会为大家带来全新的浏览体验。</p>
        <p>页面整体偏重于毒药水式色彩搭配,页面绚丽多彩,截止目前为止已开发的页面有:</p>
        <p><span style="margin-left: 2em;">(1)主要功能有:记事留言,日历,录音,视频播放,音乐播放,可视化图表等</span></p>
        <p><span style="margin-left: 2em;">(2)包含的游戏有:堆木头,压扁小鸟,进击的玉兔,拼图等游戏</span></p>
        <p></p>
      </div>
    </div>
    <div class="content__inner" id="tab-3">
      <div class="page">
        <p>欢迎访问“常温”个人网站!本网站发布的所有文章、图片、音频、视频等内容,除特别注明外,均为温轻舟原创或已获得授权使用。未经本人明确许可,任何组织或个人不得擅自转载、复制、修改、分发或以其他形式使用本网站内容,违者将依法追究其法律责任。</p>
<!--        <p>本网站可能通过表单提交、Cookies等方式收集用户的个人信息,仅用于改善用户体验、提供个性化服务或响应用户请求。我承诺不将用户信息用于任何非法目的,也不会将信息出售给第三方。</p>-->
        <p>由于网络环境的复杂性和不确定性,我无法保证绝对的信息安全,请用户自行承担因网络安全问题可能带来的风险。</p>
<!--        <p>我将采取合理的技术和管理措施,保护用户信息的安全,防止信息泄露、毁损或丢失。然而,由于网络环境的复杂性和不确定性,我无法保证绝对的信息安全,请用户自行承担因网络安全问题可能带来的风险。</p>-->
        <p>本网站提供的所有信息、观点和建议仅供参考,不构成任何专业建议或决策依据。用户在使用本网站内容时,应自行判断其适用性和准确性,并承担因使用本网站内容而产生的任何后果。</p>
      </div>
    </div>
    <div class="content__inner" id="tab-4">
      <div class="page">
        <p>如果您对本网站的内容、隐私政策或其他方面有任何疑问或建议,欢迎通过以下方式联系我:
        <p><span style="margin-left: 2em;">社交媒体:请在社交媒体主页留言/私信我:如CSDN、微信公众号、阿里云等</span></p>
        <br>
感谢您对“常温”个人网站的支持与关注!</p>
        <p></p>
      </div>
    </div>
  </div>
</div>
<script src="JS/script.js"></script>

<div id="jsi-cherry-container" class="container"></div>
    <script>
        var RENDERER = {
            INIT_CHERRY_BLOSSOM_COUNT: 30,
            MAX_ADDING_INTERVAL: 10,

            init: function () {
                this.setParameters();
                this.reconstructMethods();
                this.createCherries();
                this.render();
            },
            setParameters: function () {
                this.$container = $('#jsi-cherry-container');
                this.width = this.$container.width();
                this.height = this.$container.height();
                this.context = $('<canvas />').attr({ width: this.width, height: this.height }).appendTo(this.$container).get(0).getContext('2d');
                this.cherries = [];
                this.maxAddingInterval = Math.round(this.MAX_ADDING_INTERVAL * 1000 / this.width);
                this.addingInterval = this.maxAddingInterval;
            },
            reconstructMethods: function () {
                this.render = this.render.bind(this);
            },
            createCherries: function () {
                for (var i = 0, length = Math.round(this.INIT_CHERRY_BLOSSOM_COUNT * this.width / 1000); i < length; i++) {
                    this.cherries.push(new CHERRY_BLOSSOM(this, true));
                }
            },
            render: function () {
                requestAnimationFrame(this.render);
                this.context.clearRect(0, 0, this.width, this.height);

                this.cherries.sort(function (cherry1, cherry2) {
                    return cherry1.z - cherry2.z;
                });
                for (var i = this.cherries.length - 1; i >= 0; i--) {
                    if (!this.cherries[i].render(this.context)) {
                        this.cherries.splice(i, 1);
                    }
                }
                if (--this.addingInterval == 0) {
                    this.addingInterval = this.maxAddingInterval;
                    this.cherries.push(new CHERRY_BLOSSOM(this, false));
                }
            }
        };
        var CHERRY_BLOSSOM = function (renderer, isRandom) {
            this.renderer = renderer;
            this.init(isRandom);
        };
        CHERRY_BLOSSOM.prototype = {
            FOCUS_POSITION: 300,
            FAR_LIMIT: 600,
            MAX_RIPPLE_COUNT: 100,
            RIPPLE_RADIUS: 100,
            SURFACE_RATE: 0.5,
            SINK_OFFSET: 20,

            init: function (isRandom) {
                this.x = this.getRandomValue(-this.renderer.width, this.renderer.width);
                this.y = isRandom ? this.getRandomValue(0, this.renderer.height) : this.renderer.height * 1.5;
                this.z = this.getRandomValue(0, this.FAR_LIMIT);
                this.vx = this.getRandomValue(-2, 2);
                this.vy = -2;
                this.theta = this.getRandomValue(0, Math.PI * 2);
                this.phi = this.getRandomValue(0, Math.PI * 2);
                this.psi = 0;
                this.dpsi = this.getRandomValue(Math.PI / 600, Math.PI / 300);
                this.opacity = 0;
                this.endTheta = false;
                this.endPhi = false;
                this.rippleCount = 0;

                var axis = this.getAxis(),
                    theta = this.theta + Math.ceil(-(this.y + this.renderer.height * this.SURFACE_RATE) / this.vy) * Math.PI / 500;
                theta %= Math.PI * 2;

                this.offsetY = 40 * ((theta <= Math.PI / 2 || theta >= Math.PI * 3 / 2) ? -1 : 1);
                this.thresholdY = this.renderer.height / 2 + this.renderer.height * this.SURFACE_RATE * axis.rate;
                this.entityColor = this.renderer.context.createRadialGradient(0, 40, 0, 0, 40, 80);
                this.entityColor.addColorStop(0, 'hsl(330, 70%, ' + 50 * (0.3 + axis.rate) + '%)');
                this.entityColor.addColorStop(0.05, 'hsl(330, 40%,' + 55 * (0.3 + axis.rate) + '%)');
                this.entityColor.addColorStop(1, 'hsl(330, 20%, ' + 70 * (0.3 + axis.rate) + '%)');
                this.shadowColor = this.renderer.context.createRadialGradient(0, 40, 0, 0, 40, 80);
                this.shadowColor.addColorStop(0, 'hsl(330, 40%, ' + 30 * (0.3 + axis.rate) + '%)');
                this.shadowColor.addColorStop(0.05, 'hsl(330, 40%,' + 30 * (0.3 + axis.rate) + '%)');
                this.shadowColor.addColorStop(1, 'hsl(330, 20%, ' + 40 * (0.3 + axis.rate) + '%)');
            },
            getRandomValue: function (min, max) {
                return min + (max - min) * Math.random();
            },
            getAxis: function () {
                var rate = this.FOCUS_POSITION / (this.z + this.FOCUS_POSITION),
                    x = this.renderer.width / 2 + this.x * rate,
                    y = this.renderer.height / 2 - this.y * rate;
                return { rate: rate, x: x, y: y };
            },
            renderCherry: function (context, axis) {
                context.beginPath();
                context.moveTo(0, 40);
                context.bezierCurveTo(-60, 20, -10, -60, 0, -20);
                context.bezierCurveTo(10, -60, 60, 20, 0, 40);
                context.fill();

                for (var i = -4; i < 4; i++) {
                    context.beginPath();
                    context.moveTo(0, 40);
                    context.quadraticCurveTo(i * 12, 10, i * 4, -24 + Math.abs(i) * 2);
                    context.stroke();
                }
            },
            render: function (context) {
                var axis = this.getAxis();

                if (axis.y == this.thresholdY && this.rippleCount < this.MAX_RIPPLE_COUNT) {
                    context.save();
                    context.lineWidth = 2;
                    context.strokeStyle = 'hsla(0, 0%, 100%, ' + (this.MAX_RIPPLE_COUNT - this.rippleCount) / this.MAX_RIPPLE_COUNT + ')';
                    context.translate(axis.x + this.offsetY * axis.rate * (this.theta <= Math.PI ? -1 : 1), axis.y);
                    context.scale(1, 0.3);
                    context.beginPath();
                    context.arc(0, 0, this.rippleCount / this.MAX_RIPPLE_COUNT * this.RIPPLE_RADIUS * axis.rate, 0, Math.PI * 2, false);
                    context.stroke();
                    context.restore();
                    this.rippleCount++;
                }
                if (axis.y < this.thresholdY || (!this.endTheta || !this.endPhi)) {
                    if (this.y <= 0) {
                        this.opacity = Math.min(this.opacity + 0.01, 1);
                    }
                    context.save();
                    context.globalAlpha = this.opacity;
                    context.fillStyle = this.shadowColor;
                    context.strokeStyle = 'hsl(330, 30%,' + 40 * (0.3 + axis.rate) + '%)';
                    context.translate(axis.x, Math.max(axis.y, this.thresholdY + this.thresholdY - axis.y));
                    context.rotate(Math.PI - this.theta);
                    context.scale(axis.rate * -Math.sin(this.phi), axis.rate);
                    context.translate(0, this.offsetY);
                    this.renderCherry(context, axis);
                    context.restore();
                }
                context.save();
                context.fillStyle = this.entityColor;
                context.strokeStyle = 'hsl(330, 40%,' + 70 * (0.3 + axis.rate) + '%)';
                context.translate(axis.x, axis.y + Math.abs(this.SINK_OFFSET * Math.sin(this.psi) * axis.rate));
                context.rotate(this.theta);
                context.scale(axis.rate * Math.sin(this.phi), axis.rate);
                context.translate(0, this.offsetY);
                this.renderCherry(context, axis);
                context.restore();

                if (this.y <= -this.renderer.height / 4) {
                    if (!this.endTheta) {
                        for (var theta = Math.PI / 2, end = Math.PI * 3 / 2; theta <= end; theta += Math.PI) {
                            if (this.theta < theta && this.theta + Math.PI / 200 > theta) {
                                this.theta = theta;
                                this.endTheta = true;
                                break;
                            }
                        }
                    }
                    if (!this.endPhi) {
                        for (var phi = Math.PI / 8, end = Math.PI * 7 / 8; phi <= end; phi += Math.PI * 3 / 4) {
                            if (this.phi < phi && this.phi + Math.PI / 200 > phi) {
                                this.phi = Math.PI / 8;
                                this.endPhi = true;
                                break;
                            }
                        }
                    }
                }
                if (!this.endTheta) {
                    if (axis.y == this.thresholdY) {
                        this.theta += Math.PI / 200 * ((this.theta < Math.PI / 2 || (this.theta >= Math.PI && this.theta < Math.PI * 3 / 2)) ? 1 : -1);
                    } else {
                        this.theta += Math.PI / 500;
                    }
                    this.theta %= Math.PI * 2;
                }
                if (this.endPhi) {
                    if (this.rippleCount == this.MAX_RIPPLE_COUNT) {
                        this.psi += this.dpsi;
                        this.psi %= Math.PI * 2;
                    }
                } else {
                    this.phi += Math.PI / ((axis.y == this.thresholdY) ? 200 : 500);
                    this.phi %= Math.PI;
                }
                if (this.y <= -this.renderer.height * this.SURFACE_RATE) {
                    this.x += 2;
                    this.y = -this.renderer.height * this.SURFACE_RATE;
                } else {
                    this.x += this.vx;
                    this.y += this.vy;
                }
                return this.z > -this.FOCUS_POSITION && this.z < this.FAR_LIMIT && this.x < this.renderer.width * 1.5;
            }
        };
        $(function () {
            RENDERER.init();
        });
    </script>
</body>
</html>

二:声明.css

html,
    body {
        width: 100%;
        height: 100%;
        margin: 0;
        padding: 0;
        overflow: hidden;
    }

* {
  box-sizing: border-box;
}

:root {
  --background: rgba(137, 246, 14, 0.19);
}
.container {
    width: 100%;
    height: 100%;
    margin: 0;
    position: absolute;
    padding: 0;
    background-image: linear-gradient(to right, rgba(154, 89, 168, 0.67), rgba(30, 145, 199, 0.67), rgba(0, 255, 153, 0.67));
}
body {
  display: flex;
  grid: 2rem auto/repeat(2, 50%);
  grid-column-gap: 2rem;
  justify-content: center;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}
p {
  margin-bottom: 1rem;
}

.tab {
  z-index: 1;
  text-transform: uppercase;
  line-height: 0.8;
  display: inline-block;
  margin-left: -35px;
  filter: drop-shadow(0px -3px 2px rgba(0, 0, 0, 0.05));
  border: none;
  border-radius: 6px 6px 0 0;
  position: relative;
  margin-right: 4rem;
  background: var(--background);
  white-space: nowrap;
  cursor: pointer;
  background: var(--background);
}
.tab:focus {
  outline: none;
}
.tab:focus span {
  border-bottom: 2px solid;
  border-radius: 0;
}
.tab:first-of-type {
  margin-left: 30px;
}
.tab div {
  background: var(--background);
  padding: 6px 0;
  position: relative;
  z-index: 10;
}
.tab span {
  display: inline-block;
  border: 2px solid transparent;
  padding: 6px 15px 6px;
  border-radius: 5px;
  z-index: 5;
  position: relative;
  font-size: 140%;
  background-image: linear-gradient(to right, rgba(154, 89, 168, 0.67), rgba(255, 30, 0, 0.67), rgba(0, 255, 153, 0.67));
  min-width: 6rem;
}
.tab:before, .tab:after {
  content: "";
  height: 100%;
  position: absolute;
  background: var(--background);
  border-radius: 8px 8px 0 0;
  width: 30px;
  top: 0;
}
.tab:before {
  right: -16px;
  transform: skew(25deg);
  border-radius: 0 8px 0 0;
}
.tab:after {
  transform: skew(-25deg);
  left: -16px;
  border-radius: 8px 0 0 0;
}
.tab.active {
  z-index: 50;
  position: relative;
}
.tab.active span {
  background-image: linear-gradient(to right, rgba(40, 210, 176, 0.4), rgba(61, 206, 232, 0.35), rgba(40, 126, 231, 0.33));
  box-shadow: 0 2px 3px rgba(40, 157, 186, 0.64);
  border-radius: 5px;
  color: #d139e2;
}

.content {
  border-radius: 10px;
  position: relative;
  width: 100%;
}
.content #tab-1 {
  display: block;
}
.content:before {
  content: "";
  width: 100%;
  height: 100%;
  position: absolute;
  z-index: -1;
  top: 0;
  left: 0;
  border-radius: inherit;
}
.content__inner {
  font-family: "Yomogi", sans-serif;
  display: none;
  background: var(--background);
  border-radius: inherit;
  padding: 1rem;
  filter: drop-shadow(0px -2px 2px rgba(0, 0, 0, 0.1));
  z-index: 5;
}

.folder {
  margin: 1rem auto;
  max-width: 50rem;
  width: 100%;
  scrollbar-height: none;
  -ms-overflow-style: none;
}
.folder ::-webkit-scrollbar {
  background: transparent;
  display: none;
}

.page {
  padding: 1.5rem;
  border-radius: 2px;
  min-height: 20rem;
  line-height: 160%;
  background-color: rgb(249, 249, 249);
  filter: drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.15));
  background-image: linear-gradient(#e4e4e4 1px, transparent 1px);
  background-size: 8% 8%, 2px 2px;
}

.tabs {
  padding: 2rem 0 0 0;
  width: 100%;
  margin: 0 0.5rem;
  overflow-x: auto;
  width: calc(100% - 1rem);
  white-space: nowrap;
}
@media (min-width: 50rem) {
  .tabs {
    margin: 0 2rem;
    width: calc(100% - 4rem);
  }
}

三:script.js

function openTab(evt, tab) {
	var i, tabcontent, tablinks;
	tabcontent = document.getElementsByClassName("content__inner");
	for (i = 0; i < tabcontent.length; i++) {
		tabcontent[i].style.display = "none";
	}
	tablinks = document.getElementsByClassName("tab");
	for (i = 0; i < tablinks.length; i++) {
		tablinks[i].className = tablinks[i].className.replace(" active", "");
	}
	document.getElementById(tab).style.display = "block";
	evt.currentTarget.className += " active";
}
if (window.innerWidth > 800) {
	const scrollContainer = document.querySelector(".tabs");

	scrollContainer.addEventListener("wheel", (evt) => {
		evt.preventDefault();
		scrollContainer.scrollLeft += evt.deltaY;
	});
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

温轻舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值