该文章或问题已被删除

创建新页面、关闭页面、页面传值、预加载页面、关闭页面时回传值

当我们理解什么是HTML5+ 和 MUI 移动框架之后,我们就可以开始撸了。

一、创建一个新页面

当我们使MUI框架时,可以使用 mui.js 插件的封锁方法:mui.openWindow() 打开一个新页面,例如:

这是最简单的打开一个新页面,没有任何配置

mui.openWindow({url: 'examples/info.html', id:'info' });

下面是 mui.openWindow() 方法的全部参数配置,url和id 是必选的参数,详细的可以参考:http://dev.dcloud.net.cn/mui/window/#openwindow

mui.openWindow({
    url:new-page-url,
    id:new-page-id,
    styles:{
      top:newpage-top-position,//新页面顶部位置
      bottom:newage-bottom-position,//新页面底部位置
      width:newpage-width,//新页面宽度,默认为100%
      height:newpage-height,//新页面高度,默认为100%
      ......
    },
    extras:{
      .....//自定义扩展参数,可以用来处理页面间传值
    },
    createNew:false,//是否重复创建同样id的webview,默认为false:不重复创建,直接显示
    show:{
      autoShow:true,//页面loaded事件发生后自动显示,默认为true
      aniShow:animationType,//页面显示动画,默认为”slide-in-right“;
      duration:animationTime//页面动画持续时间,Android平台默认100毫秒,iOS平台默认200毫秒;
    },
    waiting:{
      autoShow:true,//自动显示等待框,默认为true
      title:'正在加载...',//等待对话框上显示的提示内容
      options:{
        width:waiting-dialog-widht,//等待框背景区域宽度,默认根据内容自动计算合适宽度
        height:waiting-dialog-height,//等待框背景区域高度,默认根据内容自动计算合适高度
        ......
      }
    }
})

我们在这里不讲mui.js 插件封装的 mui.openWindow() 的使用了,大家可以参考相关文档,在这里我们讲下,最原始的5+ 创建打开新页面的方法, 当我们不使用MUI框架时,也可以使用。

1.创建一个新的Webview窗口​

该方法包含4个参数,url和id 是必填, styles参数是对打开的页面,配置些相关参数,例如它是高宽,是否是沉浸式显示,是否开启硬件加速等等,extras, 是页面传页,当你打开一个新的页面时,你想把值传给它,就可以这样写 {id:"123"}

plus.webview.create( url, id, styles, extras );

怎么使用? 

列举些常用的参数配置,如需了解更多可以浏览5+的文档: http://www.html5plus.org/doc/zh_cn/webview.html#plus.webview.create

//页面参数配置,根据页面需求配置
var styles=
{
statusbar:{background:'#FFFFFF'} //仅在应用设置为沉浸式状态栏样式下有效,设置状态栏背景颜色
,
popGesture:"none" // 对IOS 应用有效,是否开启右滑关闭页面
,scrollIndicator:"none" // 隐藏页面的滚动条
,hardwareAccelerated=true //// 创建新窗口并设置开启硬件加速
,bottom:"50px" //窗口垂直向上的偏移量,支持百分比、像素值,默认值无值(根据top和height属性值来自动计算)。 当同时设置了top和height值时,忽略此属性值; 当未设置height值时,可通过top和bottom属性值来确定窗口的高度。
,bounce:"none"  //窗口遇到边框是否有反弹效果 可取值: "none" - 表示没有反弹效果; "vertical" - 表示垂直方向有反弹效果; "horizontal" - 表示水平方向有反弹效果; "all" - 表示垂直和水平方向都有反弹效果。 默认值为"none"。
};

var extras={newsid:"123"}; //页面传值
var page=plus.webview.create('xxx.html','id',styles,extras);

当我们参数写好时,创建了它,但是它不没有显示出来,此时它是隐藏的,我们通过show() 方法显示它出来

var page=plus.webview.create('xxx.html', 'id', styles, extras );
    
    //调用show() 方法,显示页面
    
    page.show("auto");

show() ,方法显示页面的一些动态效果参数​

"auto": (String 类型 )自动选择动画效果
自动选择显示窗口相对于的动画效果。
"none": (String 类型 )无动画
立即关闭页面,无任何动画效果。 此效果忽略动画时间参数,立即关闭。
"slide-out-right": (String 类型 )横向向右侧滑出屏幕动画
页面从屏幕中横向向右侧滑动到屏幕外关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。


"slide-out-left": (String 类型 )横向向左侧滑出屏幕动画
页面从屏幕中横向向左侧滑动到屏幕外关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。


"slide-out-top": (String 类型 )竖向向上侧滑出屏幕动画
页面从屏幕中竖向向上侧滑动到屏幕外关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。


"slide-out-bottom": (String 类型 )竖向向下侧滑出屏幕动画
页面从屏幕中竖向向下侧滑动到屏幕外关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。


"fade-out": (String 类型 )从不透明到透明逐渐隐藏动画
页面从不透明到透明逐渐隐藏关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。


"zoom-in": (String 类型 )从大逐渐缩小关闭动画
页面逐渐向页面中心缩小关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为100ms。
iOS - 5.1.1+ (支持): 默认动画时间为100ms。


"zoom-fade-in": (String 类型 )从大逐渐缩小并且从不透明到透明逐渐隐藏关闭动画
页面逐渐向页面中心缩小并且从不透明到透明逐渐隐藏关闭。平台支持
Android - 2.2+ (支持): 默认动画时间为100ms。
iOS - 5.1.1+ (支持): 默认动画时间为100ms。


"pop-out": (String 类型 )从右侧平移出栈动画效果
页面从屏幕右侧滑出消失,同时上一个页面带阴影效果从屏幕左侧滑入显示。平台支持
Android - 2.2+ (支持): 默认动画时间为200ms。
iOS - 5.1.1+ (支持): 默认动画时间为300ms。

 如果需要调整,显示页面时的时间,可以这样做 200 毫秒

page.show("auto",200);

 这里,大家应用知道怎么用5+的方法打开一个新页面了。

然再讲下,它的一些监听的方法 addEventListener() 的事件

"close" //Webview窗口关闭事件

"dragBounce" //Webview窗口回弹事件

"slideBounce": //Webview窗口回弹事件

"error": //Webview窗口加载错误事件

"hide": //Webview窗口隐藏事件

"loading": //Webview窗口页面开始加载事件

"loaded": //Webview窗口页面加载完成事件

"maskClick": //Webview窗口显示遮罩层时点击事件

"rendering": //Webview窗口开始渲染事件

"rendered": //Webview窗口渲染完成事件

"show": //Webview窗口显示事件

titleUpdate": //Webview加载页面标题更新事件

"touchstart": //Webview窗口接收到触屏事件

"popGesture": //Webview窗口侧滑返回事件

"progressChanged": //Webview窗口加载进度变化事件

例如以下使用,如果你想让内容加载完成后,再把它显示出来,可以这样写

 var  webview= plus.webview.create('index.html', 'id');
     //当页面内容加载完成时,触发
webview.addEventListener("loaded",function()
 {
            
        webview.show(); //再打开页面显示出来  	
                
 },false);

 二、关闭页面

当我们打开一个页面时,怎么关掉它。

1. mui.js 插件封装了两个方法:一个是JS , 调用:mui.back() 或者使用类  

官方把mui-action-back 类已经写入mui.js插件里,直接填写就可以使用.

2. 使用5+的方法关闭页面

 var page=plus.webview.currentWebview();  //获得当前窗体对象     
   	 page.close(); //关闭当前页面

 3. 使用 安卓 手机的物理返回按键,返回关闭页面 

 三、页面传值

 1. 传值给已经创建的页面,包括隐藏的页面。 例如,子页面给父页面传值

  首先你要先获得你要传值的对象窗体,5+提供了方法:plus.webview.getWebviewById();

plus.webview.getWebviewById('你要传值的页面ID'); //获得对象

如果要获得父页面也可以这样写

plus.webview.currentWebview().opener(); //获得父页面对象

例如:
var page=plus.webview.getWebviewById('home.html'); //获得对象

 

mui.js 封装了一个页面传值方法 mui.fire() , 具体使用,请看下面代码

vae webview=plus.webview.getWebviewById("xxxid"); //获得要给它传值的页面

mui.fire() //有那些参数:1.窗体对象, 2.给传值的方法起个别名,3.传值参数JSON格式
mui.fire(webview,'name',{uid:"1",title:"今天好帅"});

然后, 被传值的页面,怎么接收值呢?
监听别名:name, 的变化
document.addEventListener("name",function(e)
{
              var uid=e.detail.uid; //获得uid
              var title=e.detail.title; //获得title
});

使用5+ 的原始方法传值, 它提供了一个 evalJS() 的方法传值,这个方法是写 js 语法,然后通过evalJS() 把JS 注入到对象窗口去执行或者执行该对象的JS方法,它的使用

    var data={uid:"1",title:"要传值了哦"}; 
    
    var webview=plus.webview.getWebviewById("xxxid");
   	    webview.evalJS('getText('+data+')');
   	    

然后被传值的页面,怎么接收值?

function getText(data)
 {
   	    	var uid=data.uid;
   	    	var title=data.title;
 }

 

 2. 传值给,正在打开的页面,例如:新闻列表,点击打开一篇新闻,我们要给详情页传 一个ID ,让它获得相对的新闻资讯.

 

A页面打开B页面并传值给它

var page=plus.webview.create('xxx.html', 'xxxid',{},{newsid:"1",title:"今天是星期一"});
//调用show() 方法,显示页面
   page.show("auto");

 B页面 接收值

var webview=plus.webview.currentWebview();

var newsid=webview.newsid;
var title=webview.title;

四、预加载页面

预加载页面,就是创建它,但不显示它出来,它隐藏在APP里,什么时间才用预加载,一般你的页面,打开的频率很高,你不想一直创建它等等。

创建预加载页面的方法, 预加载页面不宜创建过多,导致APP占据资源,最好是需时创建它,不需时销毁它

1.mui.js 插件,提供了mui.init() 方法的 preloadPages 参数配置,进行预加载页面

mui.init({
	preloadPages:[
				    {
   						 id:'address',
   						 url:'address.html',
   						 styles:{"scrollIndicator":"none"}
  					},
  					{
   						 id:'address-needtem',
   						 url:'address-needtem.html',
   						 styles:{"scrollIndicator":"none"}
  					}]
});

 2. 预加载页面创建后,怎么显示它出来,例如:

var webview=plus.webview.getWebviewById("address");
    webview.show();    

5+的原始创建预加载页面,很简直,创建它但不显示它出来,需要时再show()

var page=plus.webview.create('xxx.html', 'id', styles, extras );

 

五、回传值

当我们打开子页面时,填写内容后,返回时,把值带回来,怎么做?我们需要重写返回事件

mui.js 插件,提供了一个重写返回键的方法, 在返回时,先传值,再执行关闭页面方法

mui.back=function()
{
var webview=plus.webview.getWebviewById("xxxid");          
//webview.evalJS('getText('+data+')');  
mui.fire(webview,"text",{txt:"你好"});
plus.webview.currentWebview().close(); //关闭当前页面
}

5+的写法,监听安卓 手机的返回事件

plus.key.addEventListener('backbutton',function()
{ 
var webview=plus.webview.getWebviewById("xxxid");          
//webview.evalJS('getText('+data+')');  
mui.fire(webview,"text",{txt:"你好"});
plus.webview.currentWebview().close(); //关闭当前页面

},false);

 常用的一些5+获得窗体对象的方法

 plus.webview.getWebviewById("xxxid"); //根据ID获得某个窗体对象
 plus.webview.currentWebview(); //获得当前窗体对象
 plus.webview.currentWebview().opener(); //获得当前窗体的父页面对象
 plus.webview.all(); //获得全部已经创建的页面对象

 附件可以下载简单的示例项目

S80730-204730.jpg

test.zip | 142.25KB



如果发现360解压或其他软件解压,出现压缩包损坏的提示,请更用 WinRAR 解压

点赞 0      收藏 0

1 个评论

正在加载...

这里空空如也,快来补一刀!

加载更多

回答问题或评论文章请先 或者 注册