動端側邊滑出導航欄是一種常見的UI設計,可以提升用戶體驗和導航的可用性。本文將詳細介紹如何利用前端技術實現移動端側邊滑出導航欄,并給出相關的代碼示例。
首先,我們需要一個觸發導航欄滑出的按鈕。通常情況下,這個按鈕會放在頁面的頂部或者底部,以便用戶方便點擊。我們可以使用HTML和CSS來創建這個按鈕。
HTML代碼如下所示:
```html菜單```
CSS代碼如下所示:
```css.nav-button { position: fixed; top: 20px; left: 20px; width: 60px; height: 60px; background-color: #000; color: #fff; border: 0; border-radius: 50%; font-size: 16px;}```
以上代碼創建了一個圓形的按鈕,并設置了一些基本樣式,可以根據實際需求進行調整。
接下來,我們需要實現導航欄滑出的效果。可以使用CSS來實現,具體代碼如下:
HTML代碼如下所示:
```html```
CSS代碼如下所示:
```css.nav-menu { position: fixed; top: 0; left: -80%; width: 80%; height: ; background-color: #fff; transition: all 0.3s ease;}
.nav-menu.open { left: 0;}
.nav-menu ul { list-style: none; padding: 0; margin: 0;}
.nav-menu ul li { padding: 10px 20px; border-bottom: 1px solid #ccc; cursor: pointer;}
.nav-menu ul li:last-child { border-bottom: none;}```
以上代碼創建了一個導航欄,并設置了一些基本樣式。使用左側負值的left屬性隱藏了導航欄,當給導航欄添加open類名后,left屬性變為0,導航欄就可以滑出。
接下來,我們需要使用JavaScript來處理按鈕的點擊事件,實現導航欄的滑出和收起。可以使用以下代碼:
```javascriptconst navButton = document.querySelector('.nav-button');const navMenu = document.querySelector('.nav-menu');
navButton.addEventListener('click', () => { navMenu.classList.toggle('open');});```
以上代碼添加了一個點擊事件監聽器,當按鈕被點擊時,toggle方法會切換導航欄元素的open類,從而實現導航欄的滑出和收起效果。
至此,我們已經完成了移動端側邊滑出導航欄的制作。當用戶點擊按鈕時,導航欄將從左側滑出,再次點擊按鈕時,導航欄將收起。這種交互方式可以為用戶提供良好的導航體驗。
總結一下,要實現移動端側邊滑出導航欄,我們需要使用HTML、CSS和JavaScript。通過添加一個按鈕和一個導航欄元素,利用CSS的transition屬性和JavaScript的事件監聽器,可以輕松實現這一效果。希望本文的內容對你有所幫助。
果圖
動態圖沒法彰顯它原本的魅力,可以自行下載后觀看!
代碼過長需要文檔版源碼來我的前端群581549454,已上傳到群文件
@charset "utf-8";
html, body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, p, blockquote, th, td, textarea { margin: 0; padding: 0; font-size: 14px; line-height: 24px; color: #000; font-family: 'microsoft yahei',verdana,Tahoma; }
ol, ul, li { list-style: none; line-height: 22px; }
ol, ul { zoom: 1; }
h1, h2, h3, h4, h5, h6 { font-size: 100%; }
img { border: none; max-width: 100%; }
a, a:link, a:visited { cursor: pointer; text-decoration: none;}
a:hover { cursor: pointer; }
.table { border-collapse: collapse; border-spacing: 0; }
.table td { border: solid 1px #666; }
.clear { clear: both; float: none; overflow: hidden; height: 0; font-size: 0; }
.clearFix:after { clear: both; display: block; visibility: hidden; height: 0; line-height: 0; content: "."; }
.clearFix { zoom: 1; }
* { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
:after, :before { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }
.font { font: 14px/24px "Comic Sans MS"; }
:focus { outline: none; }
.css3pie { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; behavior: url(css3pie/PIE.htc); }
/*------------------------------------------------------------------------------------------------------------------------------------------------*/
body{ font-size: 14px; font-family: "黑體-簡","黑體","微軟雅黑", Arial, Gotham, "Helvetica Neue", Helvetica, sans-serif; width: 100%; margin: 0 auto; background-color: #313131; overflow-x: hidden; }
.wrap{width:100%;height:1000px;}
.wrap p{font-size: 48px;text-align: center;color: #fff;padding-top: 280px;line-height: 60px;}
.logo{
text-align: center;
vertical-align: middle;
background: #357dd7;
margin-left: 45%;
top: 20%;
z-index: 11;
width: 240px;
height: 240px;
overflow: hidden;
position: relative;
}
.logo:hover{
box-shadow: 0px 0px 10px #333;
}
.logo h1{
display: table-cell;
vertical-align: middle;
width: 240px;
height: 240px;
}
.logo a{width: 240px;height: 240px;overflow: hidden;}
.logo a:before{
content: '';
position: absolute;
left: -230%;
top: 0px;
width: 200%;
height: 120%;
background: #1f415f;
z-index: 1;
transform:skew(30deg, 0);
-webkit-transform:skew(30deg, 0);
-ms-transform:skew(30deg, 0);
-moz-transform:skew(30deg, 0);
-o-transform:skew(30deg, 0);
transition:all .5s;
-moz-transition:all .5s;
-webkit-transition:all .5s;
-o-transition:all .5s;
}
.logo a:hover{
background: #357dd7;
}
.logo a:hover:before {
left: -60px;
}
.logo img {
position: relative;
z-index: 1;
}
/*一級導航*/
.nav-main{
position: fixed;
top: 0;
z-index: 12;
height: 100%;
width: 100px;
color: #fff;
background: #111213;
}
.nav-main a{color: #fff;}
.nav-box{
position: relative;
perspective: 200px;
-webkit-perspective: 200px;
transform-style: preserve-3d;
-webkit-transform-style: preserve-3d;
height: 100%;
z-index: 99;
}
.nav-ul li a{
display: block;
width: 100px;
height: 100px;
overflow: hidden;
text-align: center;
position: relative;
transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
-o-transition: all .5s;
}
.nav-ul li a:before{
content: '';
position: absolute;
left: -240px;
top: 0px;
width: 200px;
height: 100%;
background: #629feb;
z-index: 1;
transform: skew(30deg, 0);
-webkit-transform: skew(30deg, 0);
-ms-transform: skew(30deg, 0);
-moz-transform: skew(30deg, 0);
-o-transform: skew(30deg, 0);
transition: all .5s;
-moz-transition: all .5s;
-webkit-transition: all .5s;
-o-transition: all .5s;
}
.nav-ul li a:hover{background: #357dd7;}
.nav-ul li a:hover:before{left: -30px;}
.nav-ul li a:after{
content: '';
position: absolute;
width: 100%;
height: 30px;
left: 0;
top: 20px;
z-index: 1;
}
.nav-ul li a span{
display: block;
margin-top: 60px;
perspective: ;
position: relative;
z-index: 1;
}
.nav-slide{
position: fixed;
left: 100px;
top: 0;
width: 240px;
height: 100%;
background: #252829;
transform: rotateY(120deg);
-webkit-transform: rotateY(120deg);
-moz-transform: rotateY(120deg);
-o-transform: rotateY(120deg);
-ms-transform: rotateY(120deg);
z-index: 99;
visibility: hidden;
transform-origin: 0 0;
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-o-transform-origin: 0 0;
-ms-transform-origin: 0 0;
backface-visibility: hidden;
-webkit-backface-visibility: hidden;
transition: all .5s;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
transition-timing-function: cubic-bezier(.08, .72, .71, .96);
-webkit-transition-timing-function: cubic-bezier(.08, .72, .71, .96);
}
.nav-slide.hover{
transform: rotateY(0deg);
-webkit-transform: rotateY(0deg);
-moz-transform: rotateY(0deg);
-o-transform: rotateY(0deg);
-ms-transform: rotateY(0deg);
z-index: 15;
visibility: visible;
}
/*二級菜單*/
.nav-slide-o li a{
line-height: 50px;
display: block;
padding: 0 20px;
font-size: 14px;
overflow: hidden;
text-align: left;
position: relative;
transition: all .5s;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
}
.nav-slide-o li a:before{
content: '';
position: absolute;
left: -230%;
top: 0px;
width: 200%;
height: 100%;
background: #629feb;
z-index: 1;
transform: skew(30deg, 0);
-webkit-transform: skew(30deg, 0);
-moz-transform: skew(30deg, 0);
-o-transform: skew(30deg, 0);
-ms-transform: skew(30deg, 0);
transition: all .5s;
-webkit-transition: all .5s;
-moz-transition: all .5s;
-o-transition: all .5s;
}
.nav-slide-o li a:hover{background: #357dd7;}
.nav-slide-o li a:hover:before{left: -60px;}
.nav-slide-o li a span{position: relative;z-index: 1;}
.nav-slide-o {display: none;}
作為前端工作人員,都知道錨點是網頁制作中超級鏈接的一種,又叫命名錨記。命名錨記像一個迅速定位器一樣是一種頁面內的超級鏈接,運用相當普遍。但是點擊瞄點超鏈接后,發現定位不準確,不能隨心所欲,這下很苦逼,,,下面的這個js定位導航菜單定位很精準,比瞄點定位好用多了,,精準度都可以自由調整。
<!Doctype html>
<html>
<head>
<meta charset="gb2312">
<title>js定位導航菜單</title>
<style type="text/css">
*{margin:0;padding:0;} .w{width:1200px;margin:0 auto;}
.nav{height:56px;margin-top:500px;margin-bottom:200px;}
.box{border:1px solid red;height:800px;margin-bottom:200px;}
.nav,#scroll_nav{width:100%;background:#7a3e47;color:#fff;position:relative;}
#scroll_nav .pubW_c{height:56px;}
#scroll_nav ul {margin-left:32px;}
#scroll_nav ul li{font-size:20px;float:left;display:inline;
width:152px;text-align:center;line-height:56px;color:#fff;}
#scroll_nav ul li a{color:#fff; width:152px;height:56px;margin:0 auto;display:block;}
#scroll_nav ul li a:hover,#scroll_nav ul li a.active{color:#7a3e47;
background:#fff;text-decoration:none;}
</style>
</head>
<body>
<div class="nav oh">
<div id="scroll_nav">
<div class="pubW_c w">
<ul class="fl">
<li><a href="javascript:void(0);">box01</a></li>
<li><a href="javascript:void(0);">box02</a></li>
<li><a href="javascript:void(0);">box03</a></li>
<li><a href="javascript:void(0);">box04</a></li>
</ul>
</div>
</div>
</div>
<div class="box w scroll_top">我是box01</div>
<div class="box w scroll_top">我是box02</div>
<div class="box w scroll_top">我是box03</div>
<div class="box w scroll_top">我是box04</div>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
(function($) {
$.fn.navScroll = function(o) {
o = $.extend({
navAddClass: 'cur',
conAddClass: 'posi',
navH: 60,
speedArg: 7
}, o || {});
var navAdd = o.navAddClass,conAdd = o.conAddClass,navH = o.navH,speedArg = o.speedArg;
var _el = $(this),arrPos = [],timer = null;
$('.' + conAdd + '').each(function() {
arrPos.push($(this).offset().top);
});
_el.each(function(index) {
$(this).attr('index', index);
$(this).bind('click',
function() {
$(window).unbind('scroll', WinScroll);
_el.each(function() {
$(this).removeClass(navAdd);
});
$(this).addClass(navAdd);
fnScroll($(this));
});
});
function fnScroll(obj) {
var iSpeed = 0;
var iTarget = arrPos[obj.attr('index')]-navH;
//alert(iTarget);
clearInterval(timer);
timer = setInterval(function() {
var oLength=$("#scroll_nav a").length;
var cur = $(document).scrollTop(),clientH = $(window).height(),docH = $(document).height();
//alert(cur+" "+clientH+" " +docH+" "+iTarget);
if(obj.attr('index')==oLength-1){
if((cur+clientH)>=docH){
iTarget=docH-clientH;
//alert(iTarget);
}
}
iSpeed = (iTarget - cur) / speedArg;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed)
if (Math.abs(iTarget - cur) < 1) {
clearInterval(timer);
window.scrollTo(0, iTarget);
$(window).bind('scroll', WinScroll);
} else {
window.scrollTo(0, cur + iSpeed);
}
},
30);
}
function WinScroll() {
var cur = $(document).scrollTop()+navH;
$.each(arrPos,
function(i) {
if (cur >= arrPos[i]) {
if (cur < arrPos[i + 1]) {
_el.each(function() {
if ($(this).attr('index') == i) {
$(this).addClass(navAdd);
} else {
$(this).removeClass(navAdd);
}
});
} else {
_el.each(function() {
if ($(this).attr('index') == arrPos.length - 1) {
$(this).addClass(navAdd);
} else {
$(this).removeClass(navAdd);
}
});
}
}
});
};
$(window).on('scroll', WinScroll);
};
})(jQuery);
$('#scroll_nav ul li a').navScroll({
navAddClass: 'active',
conAddClass: 'scroll_top',
navH: 70,
speedArg: 7
});
window.onload = window.onscroll = function() {
var oNav=document.getElementById('scroll_nav');
var oTop = document.documentElement.scrollTop || document.body.scrollTop;
//alert(oTop);
if (oTop >= 600) {
if (typeof document.body.style.maxHeight === "undefined") {
oNav.style.top = oTop + 'px';
} else {
oNav.style.position = 'fixed';
oNav.style.top = 0;
oNav.style.zIndex=999999;
}
} else {
oNav.style.position = 'absolute';
oNav.style.top = 0+"px";
}
};
</script>
</body>
</html>
效果演示地址:http://tangjiusheng.com/jstx/131.html
*請認真填寫需求信息,我們會在24小時內與您取得聯系。