原生js实现 手机端导航

点击右侧菜单图标按钮,展开导航菜单;
点击一级菜单展开二级菜单;

注:要引入jQuery

<script type="text/javascript">
	//手机端头部导航菜单
	$('.navIcon').click(function() {
		$(".navIcon").toggleClass('line_move');
		$(".m_menu").toggleClass('show');
	})
	$(".header-mobile-mu .sub-menu .sub-tit").on('click', function() {
		if($(this).siblings('.sec-list').is(':hidden')) {
			$(this).addClass('on');
			$(this).siblings('.sec-list').stop().slideDown();
			$(this).parent().siblings('li').children('.sec-list').stop().slideUp().siblings('.tit').removeClass('on');
		} else {
			$(this).removeClass('on');
			$(this).siblings('.sec-list').stop().slideUp();
		}
	});
</script>
<div id="m_header" class="m_header">
	<div class="m_header_box">
		<div class="logo">
			<a href="#"><img src="" alt=""/>logo</a>
		</div>
		<div class="navIcon">
			<div class="nav_line nav_line1"></div>
			<div class="nav_line nav_line2"></div>
			<div class="nav_line nav_line3"></div>
		</div>
		<div class="clear"></div>
	</div>
	<div class="meun-nav m_menu">
		<div class="header-mobile-mu mobile-mu">
			<div class="sub-menu bocweb-submenu">
				<ul>
					<li>
						<a class="tit" href="#" title="">HOME</a>
					</li>
					<li>
						<div class="tit sub-tit">
							<a href="#">PRODUCT</a>
						</div>

						<div class="sec-list">
							<a href="#">Product</a>
						</div>
						<div class="sec-list">
							<a href="#">Product</a>
						</div>

						<div class="sec-list">
							<a href="#">Product</a>
						</div>
					</li>
					<li>
						<div class="tit sub-tit">
							<a href="#">SOLUTION&amp;CASE</a>
						</div>
						<div class="sec-list">
							<p>
								<a href="#">Power Transmission</a>
							</p>
						</div>
						<div class="sec-list">
							<p>
								<a href="#">Power Communication</a>
							</p>
						</div>
					</li>
					<li>
						<div class="tit sub-tit">
							<a href="#">SERVICE</a>
						</div>
						<div class="sec-list">
							<p>
								<a href="#">Technical Support</a>
							</p>
						</div>
					</li>
					<li>
						<div class="tit sub-tit">
							<a href="#">NEWS</a>
						</div>
					</li>
					<li>
						<div class="tit sub-tit">
							<a href="#">ABOUT US</a>
						</div>
						<div class="sec-list">
							<a href="#">Company profile</a>
						</div>
					</li>
					<li>
						<a href="#" class="tit">CONTACT US</a>
					</li>
				</ul>
			</div>
		</div>
	</div>
</div>
.clear{
clear: both;
}
#m_header {
	width: 100%;
	display: block;
	height: 70px;
	background-color: #fff;
	position: fixed;
	top: 0;
	z-index: 10;
}
.m_header_box {
	width: 92%;
	margin: 0 auto;
}
.m_header_box .logo {
	float: left;
	line-height: 70px;
}
.m_header_box .logo img {
	max-height: 58px;
	margin-top: 4px;
}
.m_header_box .navIcon {
	float: right;
	margin-top: 20px;
}
.navIcon:hover {
	cursor: pointer;
}
.navIcon .nav_line {
	width: 35px;
	height: 3px;
	background-color: #e7161a;
	border-radius: 10px;
	margin-bottom: 7px;
}
.navIcon .nav_line1 {
	transform-origin: left top 0;
}
.navIcon .nav_line3 {
	transform-origin: left bottom 0;
}
.navIcon.line_move .nav_line {
	transition: all 0.4s;
}
.navIcon.line_move .nav_line1 {
	margin-bottom: 20px;
	transform: rotate(45deg);
}
.navIcon.line_move .nav_line2 {
	display: none;
}
.navIcon.line_move .nav_line3 {
	transform: rotate(-45deg);
}
.mobile-mu {
	width: 100%;
	height: 100%;
	margin-bottom: 200px;
}
.meun-nav.m_menu {
	width: 100%;
	height: 0;
	background-color: #fdfdfd;
	overflow-y: scroll;
	transition: all 1s;
	position: absolute;
	z-index: 100;
	top: 70px;
}
.meun-nav.m_menu.show {
	height: calc(100% + 900px);
}
.mobile-mu .sub-menu {
	max-height: 100%;
}
.mobile-mu .sub-menu li {
	border-bottom: 1px solid #d3d3d3;
}
.mobile-mu .sub-menu .tit {
	display: block;
	width: 100%;
	height: 50px;
	padding: 0 3%;
	line-height: 50px;
	color: #000;
	position: relative;
	box-sizing: border-box;
}
.mobile-mu .sub-menu .sub-tit.on {
	background-color: #e7161a;
	color: #fff;
}
.mobile-mu .sub-menu .sub-tit.on a {
	color: #fff;
}
.mobile-mu .sub-menu .sub-tit:after {
	content: '';
	display: block;
	width: 26px;
	height: 26px;
	background: url(nav_jia.png) no-repeat center;
	background-size: 20px auto;
	position: absolute;
	right: 3%;
	top: 12px;
}
.mobile-mu .sub-menu .sub-tit.on:after {
	background: url(nav_jian.png) no-repeat center;
	background-size: 26px auto;
}
.mobile-mu .sub-menu .sec-list {
	padding: 7px 4%;
	display: none;
}
.mobile-mu .sub-menu .sec-list p {
	font-size: 14px;
}
.mobile-mu .sub-menu .sec-list a {
	color: #666;
}
.mobile-mu .sub-menu span {
	margin-left: 10px;
}

效果图如下:
点击图标前:
在这里插入图片描述
点击右侧导航图标后:
在这里插入图片描述
点击一级导航之后:
在这里插入图片描述

如有错误或不足,欢迎各位大佬评论指正。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现手机端上传身份证并提交表单的功能,可以使用原生 JavaScript编写以下代码: HTML部分: ``` <form id="myForm" enctype="multipart/form-data"> <input type="file" accept="image/*" capture="camera" id="idcard" name="idcard" /> <button type="button" onclick="submitForm()">提交</button> </form> ``` JavaScript部分: ```javascript function submitForm() { let formData = new FormData(); // 创建FormData对象 let fileInput = document.getElementById("idcard"); if (fileInput.files.length > 0) { let file = fileInput.files[0]; formData.append("idcard", file); // 将文件添加到FormData对象中 } // 发送表单数据 let xhr = new XMLHttpRequest(); xhr.open("POST", "submit_url", true); xhr.onreadystatechange = function() { if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) { // 请求成功的处理代码 console.log(xhr.responseText); } }; xhr.send(formData); // 发送FormData对象 } ``` 以上代码中,表单中的文件输入框为`<input type="file">`,通过`capture="camera"`属性可以直接调用手机相机进行拍照或选择相册中的图片。使用`accept="image/*"`限制只能选择图片文件。点击提交按钮时,会调用`submitForm`函数。 函数内部,首先创建一个`FormData`对象用于存储表单数据。然后,从文件输入框中获取选中的文件对象,并将其添加到`FormData`对象中,使用`append`方法。在`xhr`对象上调用`open`方法打开一个POST请求,并设置请求地址。然后,通过`onreadystatechange`函数监听请求状态和响应。最后,使用`send`方法发送`FormData`对象。 你需要将"submit_url"替换为实际的提交地址。在请求成功时,可以根据需要处理响应数据。通过控制台打印`xhr.responseText`,你可以查看服务器返回的内容。 请注意,上传文件可能需要服务器端的相应配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值