页面导航是在开发应用的过程中使用频率较高的技术,其中比较常用的导航方式有多页导航和页内导航,采用多页导航方式的应用程序包含一系列的页面,在一个页面中加入另一个页面的链接地址后,单击链接将跳转到指定页面,从而实现页面之间的导航。而页内导航方式是在一个页面内根据需要加载其他页面,使用页内导航方式的应用程序仍然包含一系列的页面,不同的是,这些页面是顺序被加载到一个选定的页面区域中,而不是从一个页面跳转到另一个页面。在传统的网站开发中,通常使用多页导航的方式,在开发基于JavaScript的Windows应用商店应用时多采用默认的页内导航方式。在本节内容中,将首先讲解两种加载页面的方法,然后介绍如何实现页内导航。

19.2.1 页面加载

在开发基于JavaScript的Windows应用商店应用时,可以使用HtmlControl和PageControl控件加载一个页面,这两个WinJS库控件曾在上面的内容中提到过,HtmlControl控件接收一个包含页面地址的对象作为参数,并根据这个地址加载相应的页面;PageControl控件是自定义控件,可以使用WinJS.UI.Pages.define函数将一个页面定义为PageControl控件,然后在其他页面中使用,使用这个PageControl控件就相当于加载了该控件相对应的页面。下面首先介绍如何使用HtmlControl控件加载一个页面。

(1)HtmlControl控件

在开发Windows应用商店应用时,有时候需要在一个页面中的某个位置显示另一个页面的内容,这时可以使用HtmlControl控件。HtmlControl控件具有一个名为"uri"的属性,该属性的值为被显示页面的地址,通过赋予该属性不同的值,可以在HtmlControl控件所在的位置加载不同的页面。

使用HtmlControl控件加载页面的方式如下:首先在一个HTML页面中添加一个HtmlControl控件,然后将HtmlControl控件的uri属性设置为被加载的地址。代码片段如下所示:

<body>

<div data-win-control="WinJS.UI.HtmlControl" data-win-options="{uri: '/contentpage.html'}"></div>

</body>

在上面的代码中,在一个HTML页面的body元素下定义了一个div元素,通过将div元素的data-win-control属性设置为WinJS.UI.HtmlControl,添加了一个HtmlControl控件,接着使用data-win-options属性设置HtmlControl控件的uri属性,其中"/contentpage.html"是被加载页面的地址。

(2)PageControl控件

PageControl控件是一种自定义控件,可以将一个页面的内容和逻辑功能定义成一个PageControl控件,然后通过在其他页面中添加这个PageControl控件来加载相应的内容,使用PageControl控件可以方便地在其他不同页面中重用一个被定义好的页面内容。下面通过一个示例介绍如何定义和使用PageControl控件。

在Visual Studio 2012中新建一个JavaScript的Windows应用商店的空白应用程序项目,将其命名为ContentLoader,在项目中新建一个名为ContentPage的文件夹,并在这个文件夹下添加一个"页面控制"项,命名为ContentPage,添加完成之后ContentPage文件夹会包含三个文件,名称分别为ContentPage.html、ContentPage.js、ContentPage.css。

首先在ContentPage.html文件中布局应用的前台界面,打开ContentPage.html文件,可以发现body元素内已经默认包含了导航按钮、页面标题等内容,删除body元素内的代码然后添加一个按钮和一个画布,画布作为一个图形容器,当点击按钮时将在画布上绘制一个图形。代码片段如下所示:

<body>

<button id="ShowRectangleButton">显示矩形</button><br /> <br />

<canvas id="ContentCanvas"></canvas>

</body>

完成前台界面的布局之后,接下来实现ContentPage.html页面的逻辑功能。打开ContentPage.js文件可以发现,文件内已经默认包含了一个匿名函数,匿名函数中调用了WinJS.UI.Pages.define函数,用于创建一个PageControl控件。下面定义一个名为contentPageControl的变量,将WinJS.UI.Pages.define函数的返回值赋予该变量,用于在HTML页面中添加PageControl控件时使用。在ready函数内为id属性为"showRectangleButton"的元素添加click事件处理函数ShowRectangleButton_Click,代码片段如下所示:

var contentPageControl = WinJS.UI.Pages.define("/ContentPage/ContentPage.html", {

ready: function (element, options) {

var showRectangleButton = document.getElementById("ShowRectangleButton");

showRectangleButton.addEventListener("click", ShowRectangleButton_Click);

}

});

在上面的代码中,调用define函数之后将函数的返回值赋给contentPageControl变量,define函数接收了两个函数参数,一个参数为ContentPage.html页面的地址,另一个参数是一个对象,这个对象有一个ready函数,表示当页面准备就绪之后要做的逻辑处理,在ready函数内调用document对象的getElementById函数获取id属性值为ShowRectangleButton的元素对象,并为元素对象注册了单击事件处理函数ShowRectangleButton_Click。

下面实现ShowRectangleButton_Click函数,用于在ContentPage.html页面的画布中绘制一个矩形,代码片段如下所示:

function ShowRectangleButton_Click(eventInfo) {

var contentCanvas = document.getElementById('ContentCanvas');

var canvasContext = contentCanvas.getContext('2d');

canvasContext.fillStyle = '#FF0000';

canvasContext.fillRect(0, 0, 90, 100);

}

上面的代码调用document对象的getElementById 函数获得id属性值为ContentCanvas的元素对象,赋值给contentCanvas变量,并通过contentCanvas变量调用元素对象的getContext函数以"2d"为参数得到用于2D绘图的对象,赋值给canvasContext变量,接着使用canvasContext变量调用对象的fillStyle属性设置填充颜色,并调用fillRect函数向画布绘制一个矩形。

PageControl控件的定义包含在ContentPage.js文件的匿名函数内,由于匿名函数中定义的变量为局部变量,不能直接使用在项目的其他文件中,为此在ShowRectangleButton_Click函数的后面定义一个命名空间,以便通过命名空间引用PageControl控件。代码片段如下所示:

WinJS.Namespace.define("ContentPage", {

pageControlName: contentPageControl

});

在上面的代码中,调用WinJS.Namespace.define函数定义了一个命名空间ContentPage,在命名空间中添加了一个名为pageControlName的成员,将其值设置为前面定义的PageControl控件contentPageControl。

以上的过程实现了一个PageControl控件,接下来介绍如何在default.html页面中使用PageControl控件。打开项目中的default.html文件,在文件的head元素内引用ContentPage.js文件,代码片段如下所示:

<script src="/ContentPage/ContentPage.js"></script>

引用ContentPage.js文件之后,在default.html文件的body元素中添加一个h2和一个div元素,h2元素用于显示default.html页面的标题,div元素用于定义PageControl控件,代码片段如下所示:

<body>

<h2>default页面</h2>

<div data-win-control="ContentPage.pageControlName"}"></div>

</body>

在上面的代码中,通过将div元素的data-win-control属性设置为命名空间ContentPage下的pageControlName成员,添加一个PageControl控件。

启动调试,应用程序界面上显示"default页面"文本和"显示矩形"按钮,单击"显示矩形"按钮,将在按钮的下方显示一个红色的矩形,如图19-7所示:

图19-7 运行效果图

转载于:https://www.cnblogs.com/finehappy/p/6645353.html

Win10系列:JavaScript页面导航相关推荐

  1. 事半功倍系列 javascript

    清华大学出版的<事半功倍系列 javascript>,本人照着书敲出来的,有些翻译了一下.前几年看了一下,最近无事,重新翻了翻,很有帮助.本书应该有光盘的,但学校的书,光盘不知在哪.希望对 ...

  2. js(javascript)页面刷新

    javascript refresh page 几种页面刷新的方法 本节内容:Javascript刷新当前页面的方法与实例. window.location.reload(),window.histo ...

  3. 微信小程序 小程序生命周期、页面导航/事件、WXS脚本(笔记)

    文章目录 1. 页面导航 1.1 声明式导航 1.2 编程式导航 1.3 导航传参 2. 页面事件 3. 生命周期 3.1 应用生命周期 3.2 页面生命周期 4. WXS脚本 4.1 什么是WXS ...

  4. 前端代码编码和设计规范系列——JavaScript编程规范

    1文档信息 条目 内容 项目编号 通用 项目名称 通用 标题 JavaScript编程规范 类别 规范文档 当前 试用草稿 摘要 当前版本 V1.0 日期 2015/11/9 作者 徐维坚(xuwei ...

  5. 微信小程序的页面导航

    目录 一.页面导航 二.页面事件 三.WXS 脚本 一.页面导航 实现页面导航的两种方式:声明式导航和编程式导航 声明式导航: 在页面上声明一个 <navigator> 导航组件 通过点击 ...

  6. Dokuwiki辅助功能开发-命名空间下页面导航

    Dokuwiki辅助功能开发-命名空间下页面导航 <php> $pinfo = pageinfo();//获取pageinfo函数返回的当前页面信息数组 $mdir = dirname($ ...

  7. WPF MvvmLight简单实例(1) 页面导航

    原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击"Load"按钮,页面会加载PageOne,点击PageOne ...

  8. 页面导航的基础与深入

    Windows8中是没有对话框的概念的,不同的界面有不同的页面,类似于网页一样的浏览模式. 通过Frame.Navigate(typeof(TestPage),obj)的方式来实现不同页面的导航. N ...

  9. 页面导航的两种方式——声明式导航、编程式导航||vue-router编程式导航||router.push() 方法的参数规则

    页面导航的两种方式 vue-router编程式导航 编程式导航基本用法 <!DOCTYPE html> <html lang="en"><head&g ...

最新文章

  1. python详细安装教程环境配置-Python的安装教程与环境配置
  2. float x 与“零值”比较的if语句为?
  3. mqtt 异步消息 长连接 解析
  4. 哪吒之魔童降世视听语言影评_国漫神作 再造辉煌——《哪吒之魔童降世》影评...
  5. u盘文件看得见却打不开_U盘出问题了,为什么自己尝试恢复后却发现很多文件打不开?...
  6. 技术干货| 阿里云基于Hudi构建Lakehouse实践探索
  7. kotlin读取sd卡里的文件_Kotlin 读取文件
  8. [举一反三]使用javascript转换字符串为dom对象(字符串动态创建dom)
  9. 有人问我:AI这么火,要不要去追赶AI的热潮?
  10. 笔者带你剖析轻量级Sharding中间件——Kratos1.x
  11. 1103 Integer Factorization (30 分)深度搜索30分大题要重写
  12. ThreatScan-免费的网站在线安全检测平台_TScan
  13. Linuux-alsa-左右声道处理
  14. Convolutional Neural Network
  15. 机器学习之sklearn使用下载MNIST数据集进行分类识别
  16. 003_JS实现图片轮播与点击播放
  17. PORIS门禁控制器
  18. JAVA数组首位末位互换_数组元素前移,第一个元素放置数组末位
  19. android+动态光圈效果,OpenGL Shader实例分析(8)彩色光圈效果
  20. [转载评论]月入1.5万 中产阶层该买什么车?

热门文章

  1. 常用数学特殊符号,复制到word中使用
  2. 使用std::thread线程相关函数,-static静态编译的程序运行时的一些常见错误
  3. Linux下如何安装最新版本工具
  4. 1.the linux device model--kobject kset学习笔记
  5. [react] 说说react diff的原理是什么
  6. Taro+react开发(98):问答模块05样式调整
  7. [html] 如何在网页中嵌入公司地址的地图?
  8. [html] html标签中的lang属性有什么作用?
  9. 前端学习(2623):Vuex初步识别
  10. 前端学习(2048)vue之电商管理系统电商系统之实现首页内容自定制