当前位置: 首页 > news >正文

Windows Store App JavaScript 开发:页内导航

页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScriptWindows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用PageControlNavigator控件加载其他页面的内容。WinJS.Navigation.navigate函数以一个包含页面地址的对象为参数,在该函数执行时将触发WinJS.Navigation.onnavigated事件并把页面地址传递给该事件。PageControlNavigator控件具有处理WinJS.Navigation.onnavigated事件的功能,它接收onnavigated事件包含的页面地址信息,加载并显示页面地址对应的页面内容。

PageControlNavigator是使用网格应用程序模板的JavaScriptWindows应用商店项目中预定义的一个控件,可以新建一个使用网格应用程序模板的JavaScriptWindows应用商店项目,在项目的js文件夹中找到navigator.js文件并添加到自己的项目中,以实现对PageControlNavigator控件的引用。

下面通过一个示例来演示如何使用HTML5JavaScript开发一个实现页内导航的Windows应用商店应用。在这个应用程序中将包含三个页面,其中一个作为框架页面用于加载其他页面,另外两个作为被加载页面。

Visual Studio 2012中新建一个JavaScriptWindows应用商店的空白应用程序项目,将其命名为SinglePageNavigation。接下来向项目中添加被加载页面,在项目根目录下新建两个文件夹,分别命名为HomePageTargetPage,在HomePage文件夹中添加一个“页面控制”项,命名为HomePage,添加完成之后HomePage文件夹下会包含三个文件,名称分别为HomePage.htmlHomePage.jsHomePage.css。以同样的方法继续在TargetPage文件夹下添加一个名为TargetPage的“页面控制”项,这样就完成了项目创建的工作。

由于在本项目中会用到导航控件PageControlNavigator,因此需要先在项目中添加定义这个控件的navigator.js文件,方法是在项目的js文件夹上单击右键,选择“添加”à“现有项”,找到本地文件中的navigator.js文件并添加到项目中。

添加完成后在default.html文件中引用navigator.js文件,打开default.html文件,在head元素中添加以下代码片段:

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

引用了navigator.js文件之后,在default.html文件的body元素中添加一个h2元素和一个PageControlNavigator控件,h2元素用于显示default页的标题,PageControlNavigator控件用于加载其他页面,代码片段如下所示:

<body>

    <h2>default</h2>

    <div id="ContentHost" data-win-control="Application.PageControlNavigator" data-win-options="{home: '/HomePage/HomePage.html'}"></div>

</body>

上面的代码将div元素的data-win-control属性赋值为Application.PageControlNavigator,定义一个PageControlNavigator控件,其中Applicationnavigator.js文件中定义的命名空间名称,在这个命名空间中定义了PageControlNavigator控件。然后通过div元素的data-win-options属性,设置PageControlNavigatorhome属性值为HomePage.html页面的地址,将HomePage页设定为应用程序启动时默认显示的页面,即应用程序的主页。

default.html文件中完成添加PageControlNavigator控件之后,接下来在default.js文件中添加代码以定义应用程序激活、挂起时的行为。首先定义一个变量nav,并为其赋值以获得对WinJS.Navigation命名空间的引用,代码片段如下所示:

var nav = WinJS.Navigation;

接着在语句“args.setPromise(WinJS.UI.processAll());”后添加代码,以使应用程序激活时PageControlNavigator控件中显示其home属性值指向的页面。代码片段如下所示:

nav.navigate(Application.navigator.home);

在上面的代码中,调用nav.navigate函数导航到PageControlNavigator控件的home属性值指定的页面。其中Application.navigator.homenavigator.js文件中定义的一个变量,代表PageControlNavigator控件的home属性,Applicationnavigator.js文件中声明的命名空间名称。

接下来编辑HomePage.html页面的内容,打开HomePage.html文件可以发现,文件中已经默认包含一个header元素和一个section元素。header元素中定义了“后退”导航按钮和页面的标题,“后退”按钮的功能由PageControlNavigator控件实现,当单击这个按钮时将返回到导航历史记录中的上一个页面,在本示例中由于HomePage页面是首先加载的页面,因此这个按钮将不可用。section元素中包含一个p元素用于显示一段文本。这里将header元素中页面的标题更改为“欢迎进入HomePage页面”,并设置其大小为h3,删除section元素中的p元素,再在section元素内添加一个按钮,用于导航到下一个页面,代码片段如下所示:

<body>

    <div class="HomePage fragment">

        <header aria-label="Header content" role="banner">

            <button class="win-backbutton" aria-label="Back" disabled type="button"></button>

            <h3 class="titlearea win-type-ellipsis">

                <span class="pagetitle">欢迎进入HomePage页面</span>

            </h3>

        </header>

        <section aria-label="Main content" role="main">

            <br />

            <button id="NextPageButton">下一个页面</button>

        </section>

    </div>

</body>

完成前台界面的布局后,打开HomePage.js文件可以发现,文件内已经默认包含了一个匿名函数,并在匿名函数内部调用了WinJS.UI.Pages.define函数。WinJS.UI.Pages.define函数有两个参数,其中第二个参数是一个对象,下面在该对象的ready函数内添加代码,为“下一个页面”按钮注册单击事件处理函数NextPageButton_Click,代码片段如下所示:

WinJS.UI.Pages.define("/HomePage/HomePage.html", {

    ready: function (element, options) {

        //为按钮添加单击事件监听器

        var nextPageButton = document.getElementById("NextPageButton");

        nextPageButton.addEventListener("click", NextPageButton_Click);

    }

});

上面的代码通过document对象的getElementById函数获得id属性值为NextPageButton的元素对象,并赋值给nextPageButton变量,然后通过nextPageButton变量调用元素对象的addEventListener函数注册单击事件的处理函数NextPageButton_Click

下面在WinJS.UI.Pages.define函数的后面编写NextPageButton_Click函数的代码,实现从HomePage.html页面导航到TargetPage.html页面,代码片段如下所示:

function NextPageButton_Click () {

    WinJS.Navigation.navigate("/TargetPage/TargetPage.html");

}

代码调用WinJS.Navigation.navigate函数实现从HomePage.html页面跳转到地址为“/TargetPage/TargetPage.html”的页面,即TargetPage.html页面。

接下来编辑TargetPage.html页面,打开TargetPage.html文件可以发现,与HomePage.html文件一样,文件中已经默认包含一个header元素和一个section元素,header元素中定义了“后退”导航按钮和页面的标题section元素中包含一个p元素显示一段文本。这里更改页面的标题为“欢迎进入TargetPage页面”,并设置其大小为h3;删除section元素及其内部的p元素,代码片段如下所示:

<body>

    <div class="TargetPage fragment">

        <header aria-label="Header content" role="banner">

            <button class="win-backbutton" aria-label="Back" disabled type="button"></button>

            <h3 class="titlearea win-type-ellipsis">

                <span class="pagetitle">欢迎进入TargetPage页面</span>

            </h3>

        </header>

    </div>

</body>

启动调试,应用程序界面上显示“default页”、“欢迎进入HomePage页面”文本和“下一个页面”按钮,如图19-8所示。单击“下一个页面”按钮,应用程序界面将显示TargetPage.html页面的内容,如图19-9所示。单击TargetPage.html页面中的返回按钮时,应用程序界面显示HomePage.html页面,如图19-8所示。

   

19-8 初始状态效果图           19-9 单击“下一个页面”按钮的效果图

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

相关文章:

  • IOS 消息机制(NSNotificationCenter)
  • DataMatrix二维条码源码分析检测识别图像位置
  • 图像切割之(一)概述
  • 关于HTML5本地存储的sessionStorage与localStorage的简单用法
  • 论存储IOPS和Throughput吞吐量之间的关系
  • Objective - C基础: 第五天 - 6.循环引用
  • 服务器的编码
  • Jquery scrollTop animate 實現動態滾動到頁面頂部
  • 多站点IIS用户安全权限设置图解教程
  • c#将http调用返回额json中的有关中文的unicode转换为中文(转)
  • 断点续传
  • T-SQL查询进阶--变量
  • cocos2dx触屏响应(单点触摸)CCTouchBegan,CCTouchMove,CCTouchEnd
  • JQuery上传插件Uploadify API详解
  • c#鼠标在控件上面,然后显示文字
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • Android 架构优化~MVP 架构改造
  • Create React App 使用
  • Date型的使用
  • Fastjson的基本使用方法大全
  • Git学习与使用心得(1)—— 初始化
  • js正则,这点儿就够用了
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Nacos系列:Nacos的Java SDK使用
  • Next.js之基础概念(二)
  • Redis在Web项目中的应用与实践
  • Spark RDD学习: aggregate函数
  • Tornado学习笔记(1)
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Vue2.0 实现互斥
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 目录与文件属性:编写ls
  • 那些年我们用过的显示性能指标
  • 如何在 Tornado 中实现 Middleware
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 听说你叫Java(二)–Servlet请求
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 交换综合实验一
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #stm32驱动外设模块总结w5500模块
  • (003)SlickEdit Unity的补全
  • (12)目标检测_SSD基于pytorch搭建代码
  • (附源码)apringboot计算机专业大学生就业指南 毕业设计061355
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .htaccess 强制https 单独排除某个目录
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .Net - 类的介绍