如何使用jQuery技术开发ios风格的页面导航菜单


Posted in Javascript onJuly 29, 2015

效果图:

如何使用jQuery技术开发ios风格的页面导航菜单

如何使用jQuery技术开发ios风格的页面导航菜单

目前市场上越来越流行IOS风格的操作系统和导航方式,在今天的jQuery教程中,我们介绍如何生成一个iphone风格的菜单导航。

HTML代码

我们使用镶嵌的<li>来生成菜单内容,并且包含在<nav>标签中,如下:

<nav>
<h1>导航菜单</h1>
<ul>
<li>
<h2>专题教程</h2>
<ul>
<li>
<h3>HTML专题教程</h3>
<ul>
<li><a href="http://www.gbin1.com/tutorials/html5-tutorial/html5-introduction">GBin1专题之HTML5教程 - 第一篇:HTML5介绍</a></li>
<li><a href="http://www.gbin1.com/tutorials/html5-tutorial/html5-new-elements">GBin1专题之HTML5教程 - 第二篇:HTML5元素</a></li>
<li><a href="http://www.gbin1.com/tutorials/html5-tutorial/html5-video">GBin1专题之HTML5教程 - 第三篇:HTML5 Video元素</a></li>
<li><a href="http://www.gbin1.com/tutorials/html5-tutorial/html5-video-doc">GBin1专题之HTML5教程 - 第四篇:HTML5 Video Doc</a></li>
<li><a href="http://www.gbin1.com/tutorials/html5-tutorial/html5-audio">GBin1专题之HTML5教程 - 第五篇:HTML5 Audio元素</a></li>
</ul>
<li>
<h3>GBin1热点秀</h3>
<ul>
<li><a href="http://www.gbin1.com/tutorials/hotspot/hotspot1/">GBin1专题之Web热点秀#1</a>
<li><a href="http://www.gbin1.com/tutorials/hotspot/hotspot2/">GBin1专题之Web热点秀#2</a>
<li><a href="http://www.gbin1.com/tutorials/hotspot/hotspot3/">GBin1专题之Web热点秀#3</a>
</ul>
 
</ul>

。。。 。。。
 
Javascript

使用jQuery来查询遍历li,并且生成菜单项目,如下:

$(function(){
 
var nav = $("nav"),
navTitle = nav.children().first(),
navTitleLabel = navTitle.text(),
mainList = navTitle.next(),
subLevels = mainList.find("ul"),
hiddenClass = "hidden";
 
nav.addClass("js");
mainList.find("a:last-child").addClass("files");
subLevels.addClass(hiddenClass);
 
navTitle.wrap($("<div/>")).before($("<a/>", {
href: "#",
className: hiddenClass,
click: function(e){
var $this = $(this),
activeList = subLevels.filter(":visible:last"),
activeListParents = activeList.parents("ul");
navTitle.text($this.text());
if(activeListParents.length > 2)
$this.text(activeListParents.eq(1).prev().text());
else if (activeListParents.length > 1)
$this.text(navTitleLabel)
else
$this.addClass(hiddenClass).empty();
setTimeout(
function(){
activeList.addClass(hiddenClass);
}, slideDuration - 100
);
mainList.css("left", parseInt(mainList.css("left")) + navWidth + "px");
e.preventDefault();
}
}));
 
subLevels.prev().wrap($("<a/>", {
href:"#",
click: function(e){
var $this = $(this);
backArrow.removeClass(hiddenClass).text(navTitle.text());
navTitle.text($this.text());
$this.next().removeClass(hiddenClass);
mainList.css("left", parseInt(mainList.css("left")) - navWidth + "px");
e.preventDefault();
}
}));
 
var backArrow = navTitle.prev(),
navWidth = nav.width(),
firstSubLevel = subLevels.eq(0),
docStyle = document.documentElement.style,
slideDuration = 0,
timingRatio = 1000;
 
if(docStyle.WebkitTransition !== undefined)
slideDuration = parseFloat(
firstSubLevel.css("-webkit-transition-duration")
) * timingRatio;
 
if(docStyle.MozTransition !== undefined)
slideDuration = parseFloat(
firstSubLevel.css("-moz-transition-duration")
) * timingRatio;
 
if(docStyle.OTransition !== undefined)
slideDuration = parseFloat(
firstSubLevel.css("-o-transition-duration")
) * timingRatio;
 
});

 
CSS

使用图片来生成页面顶端的按钮:

body {
font-size: 14px;
font-family: Arial;
background:#f5f5f8;
}
.js {
position:absolute;
width:320px;
height:480px;
top:50%;
left:50%;
margin:-280px 0 0 -160px;
overflow:hidden;
-webkit-border-radius:5px;
-moz-border-radius:5px;
border-radius:5px;
background:#fff;
-webkit-box-shadow:0 1px 2px rgba(0,0,0,.25);
-moz-box-shadow:0 1px 2px rgba(0,0,0,.25);
box-shadow:0 1px 2px rgba(0,0,0,.25);
}
.js .files {
background-image:none;
}
.js .hidden {
display:none;
}
.js * {
font-size:14px;
font-weight:400;
margin:0;
padding:0;
list-style:none;
}
.js > div {
position:relative;
z-index:1;
height:44px;
text-align:center;
font-size:14px;
line-height:44px;
color:#fff;
text-shadow:0 -1px 0 rgba(0,0,0,.4);
background:#7f94b0;
background:-webkit-gradient(
linear,
0 0,
0 100%,
color-stop(0,#b5c0ce),
color-stop(0.5,#889bb3),
color-stop(0.51,#7f94b0),
color-stop(1,#6d83a1)
);
background:-moz-linear-gradient(
top center,
#b5c0ce,
#889bb3 22px,
#7f94b0 23px,
#6d83a1
);
border-bottom:1px solid #2d3033;
-webkit-border-top-left-radius:5px;
-webkit-border-top-right-radius:5px;
-moz-border-radius-topleft:5px;
-moz-border-radius-topright:5px;
border-top-left-radius:5px;
border-top-right-radius:5px;
}
.js > div a {
height:31px;
top:7px;
left:20px;
font-size:14px;
line-height:31px;
color:#fff;
background:url('../images//center.png');
}
.js > div a, .js > div a:before, .js > div a:after {
position:absolute;
}
.js > div a:before {
left:-13px;
content:url('../images//left.png');
}
.js > div a:after {
right:-10px;
top:0;
content:url('../images//right.png');
}
.js > div a:active {
opacity:.65;
}
.js a {
text-decoration:none;
}
.js ul a {
display:block;
color:#000;
padding:.8em 18px;
border-bottom:1px solid #e0e0e0;
background:url('images/next.png') no-repeat 94% 50%;
}
.js ul a:hover {
background-color:#edf3fe;
}
.js a:focus {
outline:none;
}
.js ul {
position:absolute;
top:0;
padding-top:45px;
width:100%;
-webkit-transition:left .4s ease-out;
-moz-transition:left .4s ease-out;
-o-transition:left .4s ease-out;
}
.js ul {
left:0;
}
.js ul ul {
left:320px;
}

有效果图,有代码看起来非常明了,希望大家喜欢。

Javascript 相关文章推荐
ExtJS 2.0实用简明教程 之ExtJS版的Hello
Apr 29 Javascript
node.js中的console.timeEnd方法使用说明
Dec 09 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
Dec 05 Javascript
Vue开发过程中遇到的疑惑知识点总结
Jan 20 Javascript
Vuex和前端缓存的整合策略详解
May 09 Javascript
JS设计模式之数据访问对象模式的实例讲解
Sep 30 Javascript
基于JavaScript中标识符的命名规则介绍
Jan 06 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
Jan 26 Javascript
vue+element UI实现树形表格带复选框的示例代码
Apr 16 Javascript
layui当点击文本框时弹出选择框,显示选择内容的例子
Sep 02 Javascript
javascript跳转与返回和刷新页面的实例代码
Nov 20 Javascript
js实现倒计时秒杀效果
Mar 25 Javascript
如何用javascript计算文本框还能输入多少个字符
Jul 29 #Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 #Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
Jul 29 #Javascript
浅谈JavaScript的Polymer框架中的事件绑定
Jul 29 #Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 #Javascript
JS的框架Polymer中的dom-if和is属性使用说明
Jul 29 #Javascript
js数组去重的方法汇总
Jul 29 #Javascript
You might like
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
php 文件上传类代码
2011/08/06 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
详解PHP对数组的定义以及数组的创建方法
2015/11/27 PHP
PHP构造函数与析构函数用法示例
2016/09/28 PHP
PHP常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
使两个iframe的高度与内容自适应,且相等
2006/11/20 Javascript
js下弹出窗口的变通
2007/04/18 Javascript
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
jQuery获取文本节点之 text()/val()/html() 方法区别
2011/03/01 Javascript
window.location的重写及判断location是否被重写
2014/09/04 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery中text() val()和html()的区别实例详解
2016/06/28 Javascript
全面理解闭包机制
2016/07/11 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
jQuery实现给input绑定回车事件的方法
2017/02/09 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
python检测lvs real server状态
2014/01/22 Python
python实现自动重启本程序的方法
2015/07/09 Python
Windows下为Python安装Matplotlib模块
2015/11/06 Python
在python中实现调用可执行文件.exe的3种方法
2019/07/07 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python json格式化打印实现过程解析
2020/07/21 Python
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
列车长先进事迹材料
2014/01/25 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
会议通知范文
2015/04/15 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python