jquery移动端导航_移动应用设计/开发:使用jQuery构建导航

智能手机现在配备了一些非常高效的Web浏览器。 JavaScript比以往任何时候都更强大,并且可以借助jQuery之类的代码库进行扩展。 当您添加最新的HTML5 / CSS3规范时,就可以使用一些基本的前端代码来构建非常灵活的移动Web应用程序。

在本教程中,我将展示如何构建基于移动的 网站/ webapp 。 我们将使用CSS3媒体查询来定位特定的设备和屏幕分辨率。 再加上一点jQuery,可以使用Ajax调用来动画化菜单并加载外部页面内容。 更好的是,布局甚至可以扩展以在常规桌面浏览器(例如Chrome或Firefox)中正确显示。

定义页面结构

首先让我们浏览HTML页面,然后使用一些CSS规则设置其样式。 我将跳过标头中的大多数非常规meta标记,因为它们不会直接影响Web应用程序。 但是,我需要提及一些内容,即下面的代码段:

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">

X-UA兼容用于描述文档应如何在某些浏览器中呈现。 在HTML5中进行编码时,这是一个有趣的场景,因此我不必为此担心太多。 但是,meta 视口标签非常重要。 它将移动浏览器窗口设置为100%,而不是标准的缩放效果。

还可以使用内容值user-scalable=no禁用用户缩放。 但是在这种情况下,我们只想将全屏宽度设置为与设备的宽度相同。 Apple Web应用程序标签将使网站可以作为主屏幕图标保存到iPhone或iPod Touch。 并非完全必要,但当然值得拥有。

体内含量

在body标签内部,我设置了ID为#w的包装器div。 在内部,我使用ID #pagebody#navmenu将布局分为两个div。 您可以选择将整个页面宽度限制为640像素,以便将布局缩放到一个严格的数字。

<div id="pagebody">
	<header id="toolbarnav">
		<a rel="external" href="#navmenu" id="menu-btn"></a>
	
		<h1>HK Mobile</h1>
	</header>
	
	<section id="content" class="clearfix">
		<h2>Welcome to the Mobile Site!</h2>
	</section>
</div>

<div id="navmenu">
	<header>
		<h1>Menu Links</h1>
	</header>
	
		<ul>
		 <li><a rel="external" href="#homepage.html" class="navlink">Home</a></li>
		 <li><a rel="external" href="#about.html" class="navlink">About Us</a></li>
		 <li><a rel="external" href="#advertise.html" class="navlink">Advertise</a></li>
		 <li><a rel="external" href="#write.html" class="navlink">Write for Us</a></li>
		 <li><a rel="external" href="#contacts.html" class="navlink">Contacts</a></li>
		 <li><a rel="external" href="#privacy.html" class="navlink">Privacy Policy</a></li>
		</ul>
</div>

导航菜单的z-index值较低,因此#pagebody始终位于顶部。 这很关键,因为JavaScript代码将在页面主体上滑动一定数量的像素以显示下面的导航。

我在每个.html页面前都使用了井号(#),以阻止Mobile Safari中的某些不良行为。 每当您单击链接时,URL栏就会出现并下推内容。 但是,当引用一个ID时,除了通过JavaScript调用外,什么都不会重新加载。

CSS定位

CSS代码中没有太多令人困惑的内容。 大多数定位是手动完成的,然后通过jQuery进行操作。 但是我们的文档中有一些有趣的部分。

/** @group core body **/
#w #pagebody {
	position: relative;
	left: 0;
	max-width: 640px;
	min-width: 320px;
	z-index: 99999;
}

#w #navmenu {
	background: #475566;
	height: 100%;
	display: block;
	position: fixed;
	width: 300px;
	left: 0px;
	top: 0px;
	z-index: 0;
}

此顶部段定义了页面两个部分的样式。 我们的导航菜单只有300px宽,因此为页面内容留出了一些余地。 打开/关闭菜单按钮也直接位于左侧,并且始终可以访问。 这里重要的是z-index属性值和使用position: fixed; 在我们的导航菜单上。

工具栏顶部的标题也是一个有趣的部分。 它将设置为固定位置,因此它将随页面内容滚动。 复制的效果与任何iOS应用标题栏中的相似。

/** @group header **/
#w #pagebody header#toolbarnav { 
	display: block; 
	position: fixed; 
	left: 0px; 
	top: 0px; 
	z-index: 9999; 
	background: #0b1851 url('img/tabbar-solid-bg.png') top left no-repeat; 
	border-radius: 5px; 
	-moz-border-radius: 5px; 
	-webkit-border-radius: 5px; 
	-o-border-radius: 5px; 
	border-bottom-right-radius: 0; 
	-moz-border-radius-bottomright: 0; 
	-webkit-border-bottom-right-radius: 0; 
	border-bottom-left-radius: 0; 
	-moz-border-radius-bottomleft: 0; 
	-webkit-border-bottom-left-radius: 0; 
	height: 44px; 
	width: 100%; 
	max-width: 640px; 
}

#w #pagebody header#toolbarnav h1 { 
	text-align: center; 
	padding-top: 10px; 
	padding-right: 40px; 
	color: #e6e8f2; 
	font-weight: bold; 
	font-size: 2.1em; 
	text-shadow: 1px 1px 0px #313131;
}
移动规则

很容易注意到,我还在蓝色标题栏纹理上使用背景图像。 尺寸为640×44像素,以保持一致的布局结构。 但是我还为iPhone / iPad视网膜显示器开发了@ 2x图像。 您可以看到下面的两个图像,也可以从我的演示源代码中获取它们。

我在另一个名为sensitive.css的文件中为此功能设置了移动CSS。 它包含两个媒体查询,它们替换了视网膜设备的标题栏bg和菜单按钮图标。

/** retina display **/
@media only screen and (-webkit-min-device-pixel-ratio: 2),	
 only screen and (min--moz-device-pixel-ratio: 1.5),
 only screen and (min-device-pixel-ratio: 1.5) {
 	#w #pagebody header {
 		background: #0b1851 url('img/tabbar-solid-bg@2x.png') top left no-repeat;
 		background-size: 640px 44px;
 	}
 	
 	#w #pagebody header #menu-btn {
 		background: url('img/nav-btn@2x.png') no-repeat;
 		background-size: 53px 30px;
 	}
}
设计菜单箭头

在导航区域中,每个菜单链接的右侧还包括一个小箭头图标。 这可以很容易地用任何创作共用艺术品中的图像替换。 但是大多数CSS3爱好者都喜欢测试这种方法。

#w #navmenu ul li a::after {
	content: '';
	display: block;
	width: 6px;
	height: 6px;
	border-right: 3px solid #d0d0d8;
	border-top: 3px solid #d0d0d8;
	position: absolute;
	right: 30px;
	top: 45%;
	-webkit-transform: rotate(45deg);
	-moz-transform: rotate(45deg);
	-o-transform: rotate(45deg);
	transform: rotate(45deg);
}

#w #navmenu ul li a:hover::after { border-color: #cad0e6; }

我们正在使用transform属性在内容之后创建一个小边框。 我也设置position: absolute; 因此我们可以在内部链接项周围自由移动这些边界。 在悬停状态下更改边框颜色非常容易,从而提供了更加动态的感觉。 仅使用基本HTML5和CSS3规则就可以完成惊人的工作。

但是现在让我们进入JavaScript代码的零碎片段。 请记住,这需要包含在jQuery库中 ,我的代码才能正常运行。

jQuery动画

在编写这些自定义代码时,我创建了一个名为script.js的全新文档。 随意直接在<script>标记中编写这些内容,或从演示源代码下载我的示例。

$(document).ready(function(){
	var pagebody = $("#pagebody");
	var themenu = $("#navmenu");
	var topbar  = $("#toolbarnav");
	var content = $("#content");
	var viewport = {
  	width : $(window).width(),
  	height : $(window).height()
	};
	// retrieve variables as 
	// viewport.width / viewport.height

首先,我设置了一些页面变量,可以在其中更快地引用文档中的元素。 视口值从不使用,但是如果您希望调整动画阶段,则它会很有用。 例如,您可以检查当前浏览器的宽度,并相应地打开或缩小菜单。

function openme() { 
	$(function () {
	  topbar.animate({
	    left: "290px"
	  }, { duration: 300, queue: false });
	  pagebody.animate({
	    left: "290px"
	  }, { duration: 300, queue: false });
	});
}

function closeme() {
	var closeme = $(function() {
  	topbar.animate({
      left: "0px"
  	}, { duration: 180, queue: false });
  	pagebody.animate({
      left: "0px"
  	}, { duration: 180, queue: false });
	});
}

接下来,我定义了两个用于打开和关闭菜单的重要功能。 这些可以通过单个函数和回调切换完成–除非我们实际上需要同时为两个不同的元素设置动画。 不幸的是,这不是jQuery的默认行为,因此我们需要采用另一种语法。

我们所定位的两个元素被命名为顶栏pagebody。 具有白色背景的内部内容区域是整个页面正文。 但是,标题栏位置固定在页面顶部。 这意味着它不会自然地为页面设置动画,我们需要使用单独的调用。 将开口设置为向左推290像素(几乎是300像素的整个导航宽度),然后关闭功能将其缩回。

加载动态内容

上面的代码很容易处理动画。 从理论上讲,这是一个如此简单的移动网站所需要的,但我想再添加一点。

每次用户单击菜单链接时,我们要在查找页面内容时关闭当前导航并显示加载的gif。 然后,一旦完成,我们将删除gif图像并将其全部加载到其中。 这太棒了,因为我们甚至可以使用静态.html页面作为内容。 没有PHP,Ruby或Perl或任何后端语言会使事情变得混乱。

管理点击

首先,我们要测试用户何时单击导航按钮。 这将停止加载正常的href值,而我们可以改用自己的函数来显示外部内容。

// loading page content for navigation
$("a.navlink").live("click", function(e){
	e.preventDefault();
	var linkurl   = $(this).attr("href");
	var linkhtmlurl = linkurl.substring(1, linkurl.length);
	
	var imgloader  = '<center style="margin-top: 30px;"><img src="img/preloader.gif" alt="loading..." /></center>';

现在,我们使用navlink类为任何锚点打开一个选择器。 每当用户单击这些链接之一时,我们都会停止其加载并为完整URL设置变量。 我还为内容HTML设置了一个变量,以包括标准图像加载器。 如果您想定制自己的产品,我强烈建议Ajaxload

Ajax .load()

我已经巧妙地分解了两种不同的效果。 下面的代码是我们的第一位,它关闭了导航菜单并将整个文档窗口一直滑到顶部。 我们希望用小的加载程序动画替换内部内容,并且如果用户查看页面底部,则看不到此内容。

closeme();
	
$(function() {
	topbar.css("top", "0px");
	window.scrollTo(0, 1);
});

现在终于要用图像替换内部主体内容并获取要加载的外部页面。 通常,这只需要几百毫秒甚至更快的时间,因此我设置了超时功能。

content.html(imgloader);
	
setTimeout(function() { content.load(linkhtmlurl, function() { /* no callback */ }) }, 1200);

在加载新内容之前,这将暂停1200毫秒。 对于我的演示,这看起来要好得多,并且可以让您了解该应用程序在较慢的Internet连接上的行为。

移动网络应用HTML5 / CSS3 / jQuery教程-实时演示

结论

我鼓励所有Web开发人员下载教程源代码并自己玩。 这是HTML / CSS3和一点JavaScript效果可以完成的基本示例。 使用媒体查询和可扩展的Web浏览器,比以往任何时候都更容易构建移动屏幕。

查看您是否可以在将来的Web项目中应用任何此类代码。 构建移动应用程序是一门艺术,就像Web设计一样,需要大量的奉献精神和实践。 我希望本教程对于一些热心的开发人员来说可以是一个很好的起点。 如果您对代码有疑问或想法,请在后期讨论区与我们分享。


翻译自: https://www.hongkiat.com/blog/building-mobile-app-navigation-with-jquery/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值