使HTML元素沿着特定的滚动条而不是主滚动条移动



* {
	box-sizing: border-box;
}
body {
	font-family: Roboto, Arial, Helvetica, sans-serif;
	background-color: #fffc2e;
}
#first_screen {
	text-align: center;
	padding: 10%;
	color: black;
	font-size: 50px;
	height: 100vh;
}
/*Navigation Button*/
#tutorialnav {
	z-index: 1;
	height:100%;
	width: 0;
	position: fixed;
	background-color: #111;
	top: 0;
	left: 0;
	overflow-x: hidden;
	transition: 0.2s;
	padding-top: 80px;
	filter: drop-shadow(5px 0px 1px black);
}
#tutorialnav a {
	text-decoration: none;
	display: block;
	transition: 0s;
	color: white;
	white-space: nowrap;
}
.majornav {
	padding: 8px 8px 8px 32px;
	font-size: 25px;
}
.minornav {
	padding: 4px 8px 4px 64px;
	font-size: 16px;
}
	
#tutorialnav a:hover {
	color: yellow;
}
#navbtn {
	color: black;
	position: sticky;
	z-index: 2;
	font-size: 36px;
	cursor: pointer;
	top: 10px;
	left: 20px;
	transition: 0.7s;
	-webkit-touch-callout: none;
-webkit-user-select: none;
	-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.noselect {
	-webkit-touch-callout: none;
-webkit-user-select: none;
	-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/*End Navigation Button*/
<!DOCTYPE html>
<html>
	<title>3D Graphics Tutorial Homepage</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta charset="UTF-8">
	<meta name="description" content="3d Graphics Web Tutorials [Homepage]">
	<meta name="author" content="Harsha Boyilla">
	<meta name="keywords" content="3D, 3d, 3d graphics, 3D graphics, graphics, tutorial">
	<link rel="stylesheet" href="styles.css">
<body>
	<!-- Navigation Menu -->
	<div id="navigationmenu" class="noselect">
		<button id="navbtn">&#9776;</button>
		<nav id="tutorialnav">
			<a href="temp" class="majornav">Part 1</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 2</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 3</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 4</a>	
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
		</nav>
	</div>
	<script type="text/javascript">
		var navIsOpen = false;
		window.onload = function() 
		{
			document.getElementById("navbtn").onclick = function() 
			{	
				if(!navIsOpen)
				{
					document.getElementById("tutorialnav").style.width = "250px";
					document.getElementById("navbtn").style.color = "white";
					navIsOpen = true;
				}
				
				else if(navIsOpen)
				{
					document.getElementById("tutorialnav").style.width = "0px"
					document.getElementById("navbtn").style.color = "black";
					navIsOpen = false;
				}
					return false;
			}
		}
	</script>
	<article id="first_screen">
		<p>Welcome to my website!</p>
		<p>Placeholder text is placeholder text</p>
	</article>
</body>
</html>

在我创建的一个网站上,我有一个侧边栏,作为网站的导航菜单。左上角有一个按钮,用于打开和关闭滚动条。如果侧边栏的项目太多,则会出现一个滚动条,以便在侧边栏中滚动。我遇到的问题是,打开和关闭的按钮不会随着侧边栏滚动,而是在我滚动主页时滚动。有办法解决这个问题吗?这是我迄今为止拥有的HTML和JavaScript。

<div id="navigationmenu" class="noselect">
<button id="navbtn" onclick="openNav()">&#9776;</button>
<nav id="tutorialnav">
<a href="temp" class="majornav">Part 1</a>
<a href="temp" class="minornav">Section 1</a>
<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 2</a>
<a href="temp" class="minornav">Section 1</a>
<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 3</a>
<a href="temp" class="minornav">Section 1</a>
<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 4</a>  
<a href="temp" class="minornav">Section 1</a>
<a href="temp" class="minornav">Section 2</a>
</nav>
</div>
<script type="text/javascript">
var navIsOpen = false;
window.onload = function() 
{
document.getElementById("navbtn").onclick = function() 
{   
if(!navIsOpen)
{
document.getElementById("tutorialnav").style.width = "250px";
document.getElementById("navbtn").style.color = "white";
navIsOpen = true;
}
else if(navIsOpen)
{
document.getElementById("tutorialnav").style.width = "0px"
document.getElementById("navbtn").style.color = "black";
navIsOpen = false;
}
return false;
}
}
</script>

编辑:WHOOPS忘记了CSS。。。这是

#tutorialnav {
z-index: 1;
height:100%;
width: 0;
position: fixed;
background-color: #111;
top: 0;
left: 0;
overflow-x: hidden;
transition: 0.2s;
padding-top: 80px;
filter: drop-shadow(5px 0px 1px black);
}
#tutorialnav a {
text-decoration: none;
display: block;
transition: 0s;
color: white;
white-space: nowrap;
}
.majornav {
padding: 8px 8px 8px 32px;
font-size: 25px;
}
.minornav {
padding: 4px 8px 4px 64px;
font-size: 16px;
}
#tutorialnav a:hover {
color: yellow;
}
#navbtn {
color: black;
position: sticky;
z-index: 2;
font-size: 36px;
cursor: pointer;
top: 10px;
left: 20px;
transition: 0.7s;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;

编辑2:想出了一个解决方案-它发布在下面。不幸的是,我需要48小时才能检查自己的解决方案,所以这个线程将打开更长的时间。

好吧,希望这就是你想要的。当导航打开时,你需要在导航中有一个单独的滚动按钮,因为第一个打开是基于整个屏幕的粘性按钮。

除此之外,我将按钮标记改为div,这样它们看起来很好看。看看onclick fuction是如何工作的。你设置按钮的方式它在寻找

function openNav(){...}在你的脚本标签中,但它不在那里祝你好运。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
box-sizing: border-box;
}
body {
font-family: Roboto, Arial, Helvetica, sans-serif;
background-color: #fffc2e;
}
#first_screen {
text-align: center;
padding: 10%;
color: black;
font-size: 50px;
height: 100vh;
}
/*Navigation Button*/
#tutorialnav {
z-index: 1;
height: 100%;
width: 0;
position: fixed;
background-color: #111;
top: 0;
left: 0;
overflow-x: hidden;
transition: 0.2s;
padding-top: 80px;
filter: drop-shadow(5px 0px 1px black);
}
#tutorialnav a {
text-decoration: none;
display: block;
transition: 0s;
color: white;
white-space: nowrap;
}
.majornav {
padding: 8px 8px 8px 32px;
font-size: 25px;
}
.minornav {
padding: 4px 8px 4px 64px;
font-size: 16px;
}
#tutorialnav a:hover {
color: yellow;
}
#navbtn {
color: black;
position: sticky;
z-index: 2;
font-size: 36px;
cursor: pointer;
top: 10px;
left: 20px;
transition: 0.7s;
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
#navbtncls {
color: blanchedalmond;
}
.noselect {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
top: 10px;
left: 10px;
position: -webkit-sticky;
position: sticky;
}
</style>
</head>
<body>
<div id="navigationmenu" class="noselect">
<div id="navbtnopn" onclick="openNav()">&#9776;</div>
<nav id="tutorialnav">
<div id="navbtncls" onclick="closeNav()">&#9776;</div>
<a href="#temp" class="majornav">Part 1</a>
<a href="#temp" class="minornav">Section 1</a>
<a href="#temp" class="minornav">Section 2</a>
<a href="#temp" class="majornav">Part 2</a>
<a href="#temp" class="minornav">Section 1</a>
<a href="#temp" class="minornav">Section 2</a>
<a href="#temp" class="majornav">Part 3</a>
<a href="#temp" class="minornav">Section 1</a>
<a href="#temp" class="minornav">Section 2</a>
<a href="#temp" class="majornav">Part 4</a>
<a href="#temp" class="minornav">Section 1</a>
<a href="#temp" class="minornav">Section 2</a>
</nav>
</div>
<br><br><br><br><br><br><br>
<br><br><br><br><br><br><br>
<br><br><br><br><br><br><br>
<br><br><br><br><br><br><br>
<br><br><br><br><br><br><br>
<p>hello</p>
<script type="text/javascript">
var navIsOpen = false;

function openNav() {
document.getElementById("tutorialnav").style.width = "250px";
navIsOpen = true;
}
function closeNav() {
document.getElementById("tutorialnav").style.width = "0px"
navIsOpen = false;
}
</script>
</body>
</html>

我创建了一个解决方案,它有两个相互替换的按钮,同时保持转换的美观。就是这样。还有一个问题,那就是即使侧边栏向下滚动,关闭菜单的按钮仍然可以点击,因为关闭菜单的按键实际上与打开菜单的按钮是同一个,尽管它看起来不是那样的。我试图通过让关闭按钮和打开按钮都有自己的onclick函数来解决这个问题,但z-index没有按我希望的方式工作,所以点击无法正常工作。然而,无论如何,这是一个高中项目,所以现在可能还可以。

* {
	box-sizing: border-box;
}
body {
	font-family: Roboto, Arial, Helvetica, sans-serif;
	background-color: #fffc2e;
}
#first_screen {
	text-align: center;
	padding: 10%;
	color: black;
	font-size: 50px;
	height: 100vh;
}
/*Navigation Button*/
#tutorialnav {
	z-index: 1;
	height: 100%;
	width: 0;
	position: fixed;
	background-color: #111;
	top: 0;
	left: 0;
	overflow-x: hidden;
	transition: 0.2s;
	padding-top: 10px;
	filter: drop-shadow(5px 0px 1px black);
}
#tutorialnav a {
	text-decoration: none;
	display: block;
	transition: 0s;
	color: white;
	white-space: nowrap;
}
.majornav {
	padding: 8px 8px 8px 32px;
	font-size: 25px;
}
.minornav {
	padding: 4px 8px 4px 64px;
	font-size: 16px;
}
#tutorialnav a:hover {
	color: yellow;
}
#navbtnopen {
	color: black;
	position: sticky;
	z-index: 2;
	font-size: 36px;
	cursor: pointer;
	top: 10px;
	left: 20px;
	transition: 0.2s;
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}
#navbtncls {
	color: black;
	position: sticky;
	z-index: 2;
	font-size: 36px;
	cursor: pointer;
	left: 20px;
	transition: 0.2s;
	opacity: 0;
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
}
.noselect {
	-webkit-touch-callout: none;
	-webkit-user-select: none;
	-khtml-user-select: none;
	-moz-user-select: none;
	-ms-user-select: none;
	user-select: none;
	top: 10px;
	left: 10px;
	position: -webkit-sticky;
	position: sticky;
}
/*End Navigation Button*/
<!DOCTYPE html>
<html>
	<title>3D Graphics Tutorial Homepage</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta charset="UTF-8">
	<meta name="description" content="3d Graphics Web Tutorials [Homepage]">
	<meta name="author" content="Harsha Boyilla">
	<meta name="keywords" content="3D, 3d, 3d graphics, 3D graphics, graphics, tutorial">
	<link rel="stylesheet" href="styles.css">
<body>
	<!-- Navigation Menu -->
	<div id="navigationmenu" class="noselect">
		<span id="navbtnopen">&#9776;</span>
		<nav id="tutorialnav">
			<span id="navbtncls">&#9776;</span>
			<a href="temp" class="majornav">Part 1</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 2</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 3</a>
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
			<a href="temp" class="majornav">Part 4</a>					
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 5</a>					
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 6</a>					
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 7</a>					
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
<a href="temp" class="majornav">Part 8</a>					
				<a href="temp" class="minornav">Section 1</a>
				<a href="temp" class="minornav">Section 2</a>
		</nav>
	</div>
	<script type="text/javascript">
		var navIsOpen = false;
		window.onload = function() 
		{
			document.getElementById("navbtnopen").onclick = function() 
			{	
				if(!navIsOpen)
				{
					document.getElementById("tutorialnav").style.width = "250px";
					document.getElementById("navbtnopen").style.transition = "0s";
					document.getElementById("navbtnopen").style.opacity = "0";
					document.getElementById("navbtnopen").style.color = "black";
					document.getElementById("navbtncls").style.opacity = "1";
					document.getElementById("navbtncls").style.transition = "0.2s";
					document.getElementById("navbtncls").style.color = "white";
					navIsOpen = true;
				}
				
				else if(navIsOpen)
				{
					document.getElementById("tutorialnav").style.width = "0px"
					document.getElementById("navbtncls").style.transition = "0s";
					document.getElementById("navbtncls").style.opacity = "0";
					document.getElementById("navbtncls").style.color = "white";
					document.getElementById("navbtnopen").style.opacity = "1";
					document.getElementById("navbtnopen").style.transition = "0.2s";
					document.getElementById("navbtnopen").style.color = "black";
					navIsOpen = false;
				}
					return false;
			}
		}
	</script>
	<article id="first_screen">
		<p>Welcome to my website!</p>
		<p>Placeholder text is placeholder text</p>
	</article>
</body>
</html>

最新更新