javascript - 如何在带有单个复选框的框架中启用暗模式?
问题描述
我制作了一个如下图所示的网页,我实现了一个暗模式复选框,它使用 javascript 文件在 2 个不同的 CSS 之间切换。但是,当我的页面分为框架时,我不知道如何实现相同的功能。
单击暗模式只会更改 Frame1 的颜色。
这是我正在使用的 javascript 函数
$('#mode').change(function(){
if ($(this).prop('checked'))
{
document.getElementById('pagestyle').setAttribute('href', "darkstyle.css");
localStorage.setItem('theme', 'dark');
}
else
{
document.getElementById('pagestyle').setAttribute('href', "style.css");
localStorage.setItem('theme', 'light');
}
});
总网页代码:
<!DOCTYPE html>
<html>
<frameset rows="10%,*">
<frame src="adminFrame1.html" scrolling="no" frameborder="0">
<frameset cols="20%,*">
<frame src="adminFrame2.html" scrolling="no" frameborder="0">
<frame src="adminFrameAdd.html" scrolling="no" frameborder="0">
</frameset>
</frameset>
<head>
<title>Admin Things</title>
</head>
<body>
</body>
</html>
框架1的代码
<!DOCTYPE html>
<html>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<head>
<title>Team8 Library</title>
<link rel="stylesheet" id="pagestyle" type="text/css" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.deep_purple-purple.min.css" />
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
</head>
<body style="background-color: #820077;">
<div class="topnav">
<a href="index.html">Logout</a>
<!--<a href="#login">Login</a> -->
<label for="mode" id="cbox"><input id="mode" type="checkbox"> Dark Mode</label>
</div>
<h1 style="font-family: roboto; color: white; font-size: 3em; margin: auto; text-align: center;">Welcome Admin</h1>
<script type="text/javascript" src="changeCSS.js"></script>
</body>
</html>
框架3的代码
<!DOCTYPE html>
<html>
<head>
<title>AdminAdd</title>
<link rel="stylesheet" type="text/css" href="style.css">
<link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<link rel="stylesheet" href="https://code.getmdl.io/1.3.0/material.purple-deep_purple.min.css" />
<script defer src="https://code.getmdl.io/1.3.0/material.min.js"></script>
</head>
<body style="background: linear-gradient(to right, white, #e3a1fa); ">
<div id="signup" style="width: 75%;margin: auto;box-shadow: 3px 3px 5px grey; display: block; margin-top: 15%; padding-bottom: 2em; background: #fff;">
<form action="#">
<div class="mdl-textfield mdl-js-textfield mdl-textfield--floating-label" style="display: block;text-align: center; margin: auto;">
<input class="mdl-textfield__input" type="text" id="sample1">
<label class="mdl-textfield__label" for="sample1" style="color: indigo;">Username <span style="color: red; font-size: 0.75em;">(Required)</span></label>
</div>
<div>
<input type="submit" name="submit" class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent" style="display: block; margin: auto;">
</div>
</form>
</div>
<script type="text/javascript" src="changeCSS.js"></script>
</body>
</html>
解决方案
您可以访问 iframe 文档并设置样式,就像在代码中一样:
<script type="text/javascript">
var iframes = document.querySelectorAll('iframe');
$('#mode').change(function () {
if ($(this).prop('checked')) {
document.getElementById('pagestyle').setAttribute('href', "darkstyle.css");
iframes.forEach(function(iframe) {
var doc = iframe.contentWindow.document;
doc.getElementById('pagestyle').setAttribute('href', "darkstyle.css");
})
localStorage.setItem('theme', 'dark');
}
else {
document.getElementById('pagestyle').setAttribute('href', "style.css");
iframes.forEach(function(iframe) {
var doc = iframe.contentWindow.document;
doc.getElementById('pagestyle').setAttribute('href', "style.css");
})
localStorage.setItem('theme', 'light');
}
});
</script>
推荐阅读
- python - 如何使 INSERT 上的 SQL 注入在 SQLite 上工作
- haskell - 我可以根据反应香蕉中的行为变化构建事件吗?
- azure-devops - 如何在 Yarn 2.0 和 Azure Artifacts 中使用注册表范围
- javascript - puppeteer 使用 alt 属性从 html 中获取 img
- javascript - 如何在谷歌选择器中显示缩略图?
- linux - 找出哪个进程打开了一个短暂的端口
- vb.net - 在VB中,有没有办法创建当前类型的实例而不命名它?
- google-app-engine - 在 Windows 10 上安装 Google Cloud SDK 时出错
- input - Brainf*** 中如何处理输入?
- java - org.sqlite.SQLiteException:[SQLITE_NOTADB] 打开的文件不是数据库文件(文件已加密或不是数据库)[NETBEANS]