JS实现网页页面的框架(demo)

news2024/11/27 11:33:05
采用JS实现网页页面的框架

采用的技术点有html,css,JS,jQuery

成品:

HTML:

<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<link rel="stylesheet" href="./css/home.css">
		<link rel="stylesheet" href="./css/aaaaaaa.css">
		
		<script src="js/jquery-3.7.0.js"></script>
	</head>
	<body>
		<!-- 注释的东西到时候可以添加导航栏 -->
		<div class="frame">
			<div class="frame_left">
				<!-- 头部一会要换掉 -->
				<div class="frame_left_title">
					<img src="./img/bcb1ecb0-f75d-4ff9-8fde-c0213535183d.png" alt="">
					<p class="left_show">礼盒商城</p>
				</div>
				<div class="frame_list">


					<div class="frame_item">
						<div class="frame_item_prent" onclick="listOpen(event)">
							<div>
								<img src="./img/123.png" alt="">
								<p class="left_show">账号管理</p>
							</div>
							<img class="left_show" src="./img/向上箭头.png" alt="">
						</div>
						<div class="frame_item_child">


							<div class="frame_child_item">
								<img src="./img/123.png" alt="">
								<p>人员管理</p>
							</div>
							<div class="frame_child_item">
								<img src="./img/123.png" alt="">
								<p>人员管理</p>
							</div>
							<div class="frame_child_item">
								<img src="./img/123.png" alt="">
								<p>人员管理</p>
							</div>


						</div>
					</div>


				</div>

			</div>
			<div class="frame_top">
				<div class="frame_info">
					<div class="frame_info_i">
						<img src="./img/展开列.png" alt="" onclick="isToggle()">
						<p>数据统计</p>
					</div>

					<div class="frame_info_in">
						<div class="frame_fr">
							<img src="./img/搜索 (2).png" alt="">
							<img src="./img/文字.png" alt="">
							<img src="./img/日间模式.png" alt="">
							<img src="./img/设置.png" alt="">
							<div class="zzzz">
								<div>admin</div>
								<img src="./img/0775639c-c82c-4a29-937f-d2a3bae5151a.png" alt="" width="40px"
									height="40px" id="touxiang">

								<button id="quit">退出登录</button>
							</div>
						</div>
					</div>


				</div>


				<div class="frame_nav">
					<div class="nav_home" onclick="isHref('数据统计','/','')">数据统计</div>
					<div class="nav_list">
						<!-- <div class="nav_item">
							<p>页面</p>
							<img src="./img/删除.png" alt="">
						</div>
						<div class="nav_item">
							<p>页面</p>
							<img src="./img/删除.png" alt="">
						</div>
						<div class="nav_item">
							<p>页面</p>
							<img src="./img/删除.png" alt="">
						</div> -->
					</div>
				</div>

			</div>
			<div class="frame_content">

				

			
				
			</div>
		</div>

		<!-- 退出登录 -->
		<div class="box_x" style="display: none;">
			<div id="xiugai"
				style="background-color: #000;opacity: 40%;width: 100%;height: 100%;position: fixed;top: 0;left: 0; z-index: 5;">
			</div>
			<div class="hint">
				<div class="hint-h">
					<p>提示操作</p>
				</div>
				<div class="hint-i">
					<img src="./img/307感叹号-圆框.png" alt="" width="20px" height="20px">
					<p>您确定要退出运营管理公司?</p>
				</div>
				<div class="hint-n">
					<button id="quxiao">取消</button>
					<button id="queding">确定</button>
				</div>
			</div>
		</div>
		<script src="js/home.js"></script>

	</body>
</html>

CSS:

/* 注释的东西到时候可以添加导航栏 */
* {
	margin: 0;
	padding: 0;
	box-sizing: border-box;
}

.frame {
	width: 100%;
	height: 100vh;
	overflow: hidden;
	position: relative;
}

.frame_left {
	width: 220px;
	height: 100%;
	background-color: #eeeeee;
	overflow-y: scroll;
	position: absolute;
	top: 0;
	left: 0;
	z-index: 1;
	scrollbar-width: none;
	-ms-overflow-style: none;
	transition: all 1s;
}

.frame_left ::-webkit-scrollbar {
	display: none;
}

.frame_left_title {
	width: 240px;
	height: 60px;
	display: flex;
	/* justify-content: center; */
	align-items: center;
}

.frame_left_title img {
	width: 60px;
	/* height: 60px; */
}

.frame_left_title p {
	font-size: 20px;
	margin-left: 10px;
}

.frame_list {
	width: 100%;
	width: 220px;
}

.frame_item_prent {
	width: 100%;
	height: 70px;
	display: flex;
	justify-content: space-between;
	padding: 0 20px;
	align-items: center;
}

.frame_item_prent:hover {
	background-color: #CCCCCC;
	color: #fff;
}

.frame_item_prent div {
	display: flex;
}

.frame_item_prent img {
	width: 30px;

}

.frame_item_prent p {
	line-height: 30px;
	margin-left: 20PX;
}

.frame_item_prent>img {
	width: 18px;
	transform: rotate(180deg);
}

.frame_item {
	width: 100%;
	position: relative;
}

.frame_item_hover {
	display: none;
	position: absolute;
	z-index: 10;
	top: 0px;
	left: 70px;
	background-color: #fff;
	box-shadow: 0px 2px 5px 2px #b5b5b5;

}

.frame_item_hover .frame_child_item {
	padding: 0px 20px;
}

.frame_child_item:hover {
	background-color: #cccccc;
	color: #3796FF;
}

.frame_item_child {
	width: 100%;
	display: none;
	white-space: nowrap;
}

.frame_child_item {
	width: 100%;
	padding-left: 40px;
	height: 50px;
	display: flex;
	align-items: center;
}

.frame_child_item img {
	width: 30px;
	height: 30px;
}

.frame_child_item p {
	margin-left: 10px;
	white-space: nowrap;
}

.frame_top {
	width: calc(100% - 220px);
	height: 50px;
	/* line-height: 60px; */
	background-color: #EEEEEE;
	position: absolute;
	top: 0;
	right: 0;
	z-index: 5;
	transition: all 1s;
	/* 	display: flex;
	justify-content: space-between; */
}

.frame_info {
	width: 100%;
	height: 50px;
	/* background-color: #eeeeee; */
	display: flex;
	align-items: center;
	justify-content: space-between;
	/* border-bottom: 1px solid #DCDFE6; */
	/* position: absolute; */
}

.frame_info img {
	width: 25px;
	height: 25px;
	margin: 10px 20px;
}

.frame_info_i {
	width: 160px;
	display: flex;
	/* justify-content: space-between; */
	align-items: center;
}


/* 
.frame_fr{
	display: flex;
	justify-content: space-between;
} */
.frame_info_in {}


.frame_fr {
	padding-right: 1%;
	display: flex;
	width: 450px;
	justify-content: space-evenly;
	align-items: center;

}


/* 退出弹窗 */
.zzzz {
	width: 100px;
	display: flex;
	justify-content: space-between;
	position: relative;
	align-items: center;
}


#quit {
	background-color: white;
	box-shadow: 5px 5px 20px #2c3e50;
	width: 90px;
	height: 35px;
	border: 1px solid #e2e2e2;
	opacity: 0;
	transition: 0.5s;
	top: 50px;
	position: absolute;
	right: 5px;
	z-index: 4;
	border-radius: 5px;
}

/* 提示弹窗 退出登录 批量删除 */
.hint {
	background-color: white;
	width: 450px;
	height: 150px;
	position: fixed;
	top: 45%;
	left: 40%;
	border-radius: 10px;
	z-index: 6;
}

.hint-h p {
	padding: 10px;
	font-size: 22px;
}

.hint-i {
	display: flex;
	padding: 10px;
}

.hint-i p {
	margin-left: 15px;

}

.hint-n {
	padding: 10px;
	margin-left: 60%;
}

.hint-n button {
	width: 72px;
	height: 35px;
	border-radius: 5px;
	border: 1px solid #e2e2e2;
}

#queding {
	background-color: #409EFF;
	color: white;

}

.frame_nav {
	/* top: 60px; */
	width: 100%;
	height: 50px;
	display: flex;
	/* line-height: 50px; */
	/* position: fixed; */
	/* padding: 0 20px; */
	/* margin-top: 15px; */
	background-color: #eeeeee;
}

.frame_content {
	width: calc(100% - 220px);
	height: calc(100% - 100px);
	/* 原本为100高度,现在为50,删除了导航栏的高度 */
	background-color: #F2F3F5;
	position: absolute;
	bottom: 0;
	right: 0;
	z-index: 1;
	padding: 20px;
	transition: all 1s;
	/* overflow: scroll; */
}

/* 面包屑,头顶导航栏 */

.nav_list {
	/* width: 100%; */
	height: 50px;
	padding: 5px 0;
	display: flex;
}

.nav_item {
	padding: 0 10px;
	display: flex;
	align-items: center;
	margin-right: 10px;
	background-color: #ccc;

}

.nav_item img {
	width: 20px;
}

.nav_item p {
	/* margin-right: 8px; */
}

.nav_home {
	padding: 0 10px;
	display: flex;
	justify-content: center;
	align-items: center;
	margin-right: 10px;
	background-color: #ccc;
	height: 40px;
	line-height: 40px;
	margin: 5px 5px;
}

.nav_home img {
	width: 20px;
}

.nav_home p {
	margin-right: 8px;
}

.active {
	background-color: #fff;
	color: #3796FF;
}

JS:

// 所有的名称是下划线还是横线要注意
// 二级列表展开事件
function listOpen(e) {
	$(e.target).next(".frame_item_child").toggle(500);
}

// 菜单折叠事件
function isToggle() {
	if ($(".frame_left").width() < 220) {
		$(".frame_left").css('width', '220px');
		$(".frame_top").css('width', 'calc(100% - 220px)');
		$(".frame_content").css('width', 'calc(100% - 220px)');
		$(".left_show").show()
		$(".frame_left").css({
			'z-index': '1',
			'overflow-y': 'scroll'
		});
		$(".frame_left_title").css('width', '220px');
		$(".frame_item").css('width', '220px');
		$(".frame_item_hover").hide()
		$(".frame_item_hover").attr('class', 'frame_item_child');
	} else {
		$(".frame_left").css('width', '80px');
		$(".frame_top").css('width', 'calc(100% - 80px)');
		$(".frame_content").css('width', 'calc(100% - 80px)');
		$(".left_show").hide();
		$(".frame_left").css({
			'z-index': '9',
			'overflow-y': 'visible'
		});
		$(".frame_left_title").css('width', '80px');
		$(".frame_item").css('width', '80px');
		$(".frame_item_child").hide();
		$(".frame_item_child").attr('class', 'frame_item_hover');
	}
}

// 这是一个登录请求的接口,请求成功后返回一个树形菜单的数组,下面需要用到
let list = []
$.ajax({
	type: "POST",
	url: 地址
	data: {
		需要请求的参数
	},
	success: (res) => {
		console.log(res);
		list = res.data.menu;
		console.log(list);
		renders()
	}
})

function renders() {
	let name = sessionStorage.getItem("name") || '';
	let parent = sessionStorage.getItem("parent") || '';
	console.log(list);
	let str = '';
	for (let i = 0; i < list.length; i++) {
		if (list[i].children && list[i].children.length > 1) {
			str += `
				<div class="frame_item">
					<div class="frame_item_prent ${list[i].meta.locale == name && parent != name ? 'active' : ''}" onclick="listOpen(event)">
						<div>
							<img src="./img/123.png" alt="">
							<p class="left_show">${list[i].meta.locale}</p>
						</div>
						<img class="left_show" src="./img/向上箭头.png" alt="">
					</div>
					<div class="frame_item_child" style="display:${parent == list[i].meta.locale ? 'block' : 'none'}">
			`;

			for (let k = 0; k < list[i].children.length; k++) {
				str += `
					<div class="frame_child_item ${list[i].children[k].meta.locale == name ? 'active' : ''}" onclick="isHref('${list[i].children[k].meta.locale}','${list[i].children[k].meta.path}','${list[i].meta.locale}')">
						<img src="./img/123.png" alt="">
						<p>${list[i].children[k].meta.locale}</p>
					</div>
				`;
			}

			str += `</div>
					</div>`;
		} else {
			str += `
				<div class="frame_item" onclick="isHref('${list[i].meta.locale}','${list[i].meta.path}','${list[i].meta.locale}')">
					<div class="frame_item_prent ${list[i].meta.locale == name ? 'active' : ''}">
						<div>
							<img src="./img/123.png" alt="">
							<p class="left_show">${list[i].meta.locale}</p>
						</div>
					</div>
				</div>
				<div class="frame_item_child"></div>
			`;
		}
	}

	$('.frame_list').html(str);
	a ()
}

function a (){
	for (let i = 0; i < $('.frame_item').length; i++) {
		$('.frame_item').eq(i).on('mouseover', function() {
			$('.frame_item_hover').eq(i).show()
		})
		$('.frame_item').eq(i).on('mouseout', function() {
			$('.frame_item_hover').eq(i).hide()
		})
	}
}

function isHref(name,path,parent){
	if (path == '/') {
		location.href = './home.html';
		return
	}
	let nav = JSON.parse(sessionStorage.getItem('nav')) || [];
	
	let status = false;
	sessionStorage.setItem("name", name);
	sessionStorage.setItem("parent", parent);
	for (let i = 0; i < nav.length; i++) {
		if (nav[i].name == name) {
			status = true;
			break;
		}
	}
	if (!status) {
		nav.push({
			name: name,
			path: path,
			parent: parent
		})
		sessionStorage.setItem("nav", JSON.stringify(nav));
	}
	location.href = '.' + path + '.html';
	console.log(name);
	console.log(path);
}


renderNav()

function renderNav() {
	let name = sessionStorage.getItem("name") || '';
	let nav = JSON.parse(sessionStorage.getItem('nav')) || [];
	let str = '';
	for (let i = 0; i < nav.length; i++) {
		str += `
		<div class="nav_item ${name == nav[i].name ? 'active' : ''}">
			<p onclick="isHref('${nav[i].name}','${nav[i].path}','${nav[i].parent}')">${nav[i].name}</p>
			<img src="./img/删除.png" alt="" onclick="del(${i})">
		</div>
		`;
	}
	document.getElementsByClassName("nav_list")[0].innerHTML = str;

	if (name == '数据统计') {
		$(".nav_home").addClass("active");
	} else {
		$(".nav_home").removeClass("active");
	}
}

// 删除
function del(i) {
	let nav = JSON.parse(sessionStorage.getItem('nav')) || [];
	nav.splice(i, 1);
	sessionStorage.setItem("nav", JSON.stringify(nav));

	let name, parent;

	if (nav[i - 1]) {
		name = nav[i - 1].name;
		parent = nav[i - 1].parent;
	} else if (nav[0]) {
		name = nav[0].name;
		parent = nav[0].parent;
	} else {
		name = '数据统计';
		parent = '';
	}

	sessionStorage.setItem("name", name);
	sessionStorage.setItem("parent", parent);

	renderNav();
	renders();
}


// 退出登录、切换登录
let quit = document.getElementById("quit");
let zzzz = document.getElementsByClassName("zzzz")[0];
let box = document.getElementsByClassName("box_x")[0];
// 鼠标放上去显示退出登录
zzzz.addEventListener("mouseenter", () => {
	quit.style.opacity = "1"
})
zzzz.addEventListener("mouseleave", () => {
	quit.style.opacity = "0"
})

// 退出登录/切换用户
quit.addEventListener("click", () => {
	box.style.display = "block"
})

quxiao.addEventListener("click", () => {
	box.style.display = "none"
})

xiugai.addEventListener("click", () => {
	box.style.display = "none"
})

queding.addEventListener("click", () => {
	sessionStorage.removeItem('nav')
	sessionStorage.removeItem('info')
	location.href = './index.html'
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1291657.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka -- 初识

目录 kafka是什么 Topic Partition Broker Cousumer CousumerGroup Offset reblance broker 消息存储 Isr kafka是什么 Kafka 是一个分布式的消息引擎&#xff0c;能够发布和订阅消息流&#xff08;类似于消息队列&#xff09; 以容错的、持久的方式存储消息流 多分区…

软件工程之UML建模

从公众号转载&#xff0c;关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、建模基础 1.建模的底层逻辑 用一个公式表达建模的底层逻辑&#xff1a;建模 图形 逻辑 现实的抽象&#xff0c;用一句概括即是用图形逻辑…

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元&#xff0c;是经济发展的重要载体。随着我国经济的快速发展&#xff0c;各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用&#xff0c;智慧园区已成为当今城市规划和社会发展的关注焦点&#xff0c;今天我们来介绍…

【AIGC】Midjourney的使用技巧

Midjourney介绍 《Midjourney》是一款2022年3月面世的AI绘画工具&#xff0c;创始人是David Holz。只要输入想到的文字&#xff0c;就能通过人工智能产出相对应的图片&#xff0c;耗时只有大约一分钟。 Midjourney依托于Discord社区平台对外提供服务。使用前需要准备好飞机。…

ROS小练习——参数设置

目录 一、参数名获取 二、参数修改 1、代码修改 C python 2、命令行修改 3、启动时修改 4、launch文件传参修改 一、参数名获取 rosparam list 二、参数修改 1、代码修改 C #include "ros/ros.h"int main(int argc, char *argv[]) {ros::init(argc,argv,…

文心一言大模型应用开发入门

本文重点介绍百度智能云平台、文心一言、千帆大模型平台的基本使用与接入流程及其详细步骤。 注册文心一言 请登录文心一言官方网站 https://yiyan.baidu.com/welcome 点击登录&#xff1b;图示如下&#xff1a; 请注册文心一言账号并点击登录&#xff0c;图示如下&#xff1…

【WPF.NET开发】WPF中的窗口

目录 1、窗口类 2、实现窗口 2.1 为 MSBuild 配置窗口 3、窗口生存期 3.1 打开窗口 3.2 窗口激活 3.3 关闭窗口 3.4 窗口生存期事件 4、窗口位置 4.1 最顶层窗口和 z 顺序 5、窗口大小 6、大小调整属性的优先级顺序 7、窗口状态 8、窗口外观 8.1 重设大小模式 …

HeyGen推出Avatar2.0:AI视频翻译工具引领虚拟分身创作新时代

在数字创意领域迈向新的里程碑&#xff0c;HeyGen公司正式推出了Avatar2.0&#xff0c;这是一款令人惊叹的AI视频翻译工具&#xff0c;仅需短短5分钟&#xff0c;用户即可在手机上打造一个逼真的虚拟分身。HeyGen的这一最新创新标志着他们在多模态内容生成领域的持续引领地位&a…

Ubuntu18安装(重启黑屏问题)

1. F10 进入bios&#xff0c;选择u盘里的ubuntu镜像 2.进入使用ubuntu&#xff0c;下载 3.重启&#xff0c;esc 4.ubuntu 安e进入 5. nomodeset&#xff08;&#xff09; F10 保存启动 6. 7.没有网 手机usb提供网络 下载有限网卡驱动

什么牌子的开放式耳机好用?手把手教你选,小白必看!

开放式耳机大揭秘&#xff0c;小白也能秒变发烧友&#xff0c;在这个喧嚣的音乐世界&#xff0c;究竟哪个牌子的开放式耳机好用&#xff1f;戴着这个问题我会手把手教你如何挑选&#xff0c;不仅仅是推荐&#xff0c;还会详细解析各个品牌的特色&#xff0c;让你在挑选的过程中…

从 ByteHouse 网关,看如何进一步提升 OLAP 引擎性能

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 随着数字化转型的加速&#xff0c;企业面临着海量数据收集、处理和分析挑战。ClickHouse因其分析速度快、高性能的特点&#xff0c;被开发者广泛使用。 作为连接客户…

R语言手册30分钟上手

文章目录 1. 环境&安装1.1. rstudio保存工作空间 2. 创建数据集2.1. 数据集概念2.2. 向量、矩阵2.3. 数据框2.3.1. 创建数据框2.3.2. 创建新变量2.3.3. 变量的重编码2.3.4. 列重命名2.3.5. 缺失值2.3.6. 日期值2.3.7. 数据框排序2.3.8. 数据框合并(合并沪深300和中证500收盘…

河南诗词大会规则和流程

河南省诗词大赛是一场充满诗意的盛会&#xff0c;分为小学组、中学组和社会组。流程包括四个环节&#xff1a;“大浪淘沙” 、“月宫折桂” 、“飞花令”和“诗画南阳”。 比赛前两轮为“大浪淘沙”和“月宫折桂”环节&#xff0c;所有赛手采用平板现场答题&#xff0c;时间为2…

安科瑞智慧型动态无功补偿的工业应用—— 以江苏某陶瓷生产企业配电房改造为例

安科瑞电气股份有限公司 摘 要&#xff1a;低压配电系统的无功补偿是电能质量治理的重要环节。在传统无功补偿中&#xff0c;响应速度较慢&#xff0c;补偿电流呈阶梯式&#xff0c;存在过补或欠补的现象&#xff0c;有时未必能到达理想的效果。为了解决这一问题&#xff0c;…

软件测试工程师基本要求的经验之谈

作为一位从事软件测试行业三年左右的初级测试工程师&#xff0c;下面给大家分享一些日常工作中的一些经验哈&#xff0c;专业大佬勿喷哈~ 首先&#xff0c;何为软件测试。软件测试顾名思义&#xff0c;就是测试软件系统的功能、性能&#xff0c;尽可能多的发现其中存在的问题&…

代码随想录算法训练营 ---第五十七天

今天是两道动态规划的经典题目。 第一题&#xff1a; 简介&#xff1a; 做了今天的题目我有了新的理解&#xff0c;我觉得过去我过于注重对于二维数组的理解&#xff0c;忽略了对dp数组i 和 j 的含义的理解。 动态规划五部曲&#xff1a; 1.确定dp数组的含义 本题我们将i …

MES管理系统提升车间数字化的五个关键功能模块

随着科技不断进步&#xff0c;生产管理信息系统也越来越智能化。其中&#xff0c;MES管理系统是生产管理领域中广泛应用的系统之一。通过实时数据采集、监控、分析和控制&#xff0c;MES管理系统能够给协助企业实现生产过程的可视化、标准化和优化&#xff0c;从而提高生产效率…

制作一个RISC-V的操作系统五-RISC-V汇编语言编程三

文章目录 分析code/asm/add中的makefile相关命令 算数运算指令addadd2sub 练习5-1 分析code/asm/add中的makefile makefile EXEC testSRC ${EXEC}.sGDBINIT ../gdbinitinclude ../rule.mk很明显还要去执行rule.mk rule.mk include ../../common.mk.DEFAULT_GOAL : all a…

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个&#xff1a; onLaunch(options)&#xff1a;当小程序初始化完成时&#xff0c;会触发 onLaunch&#xff08;全局只触发一次&#xff09;。onShow(options)&#xff1a;当小程序启动或从后台进入前台显示时&#xff0c;会触发 on…

Numpy 实现ID3决策树

Numpy 实现ID3决策树 # 定义节点类 二叉树 class Node:def __init__(self, rootTrue, labelNone, feature_nameNone, featureNone):self.root rootself.label labelself.feature_name feature_nameself.feature featureself.tree {}self.result {label:: self.label,fea…