JS SDK 随手笔记
JS SDK 随手笔记
- 窗口模块
- Frame/Multi Frame
- 对话框
- 页面间的通讯
- 生命周期
- 窗口层叠
窗口模块
窗口模块是是AppCan移动应用界面最基本的单位。窗口是每个界面布局的基础,他是一个容器,在window里面可以添加原生控件,Frame。并且处理页面间的逻辑动画等基本工作。
下面的代码是AppCan窗口的结构:
<!DOCTYPE html>
<html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px">
<!--htmlHead开始-->
<head>
<title></title>
<meta charset="utf-8">
<meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<link rel="stylesheet" href="css/fonts/font-awesome.min.css">
<link rel="stylesheet" href="css/ui-box.css">
<link rel="stylesheet" href="css/ui-base.css">
<link rel="stylesheet" href="css/ui-color.css">
<link rel="stylesheet" href="css/appcan.icon.css">
<link rel="stylesheet" href="css/appcan.control.css">
</head>
<!--htmlHead结束-->
<!--body开始-->
<body class="um-vp" ontouchstart>
<div id="page_0" class="up ub ub-ver bc-bg" tabindex="0">
<!--header开始-->
<div id="header" class="uh bc-text-head ub bc-head">
<div class="nav-btn" id="nav-left"></div>
<h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">AppCan</h1>
<div class="nav-btn" id="nav-right">
<!--按钮开始-->
<!--按钮结束-->
</div>
</div>
<!--header结束--><!--content开始-->
<div id="content" class="ub-f1 tx-l ">
</div>
<!--content结束-->
</div>
<script src="js/appcan.js"></script>
<script src="js/appcan.control.js"></script>
</body>
<!--body结束-->
<!--脚本区开始-->
<script>
appcan.ready(function() {
var titHeight = $('#header').offset().height;
appcan.frame.open("content", "index_content.html", 0, titHeight);
window.onorientationchange = window.onresize = function() {
appcan.frame.resize("content", 0, titHeight);
}
});
</script>
<!--脚本区开始-->
</html>
首先,一个窗口最上边是html的一些head,title等标签。最下边是我们的脚本区。中间是部分。 下面我们来看看body部分,在AppCan中,body下边是一个page,而在page中有我们AppCan定义Head,Content,Footer,结合AppCan页面来说就是……。但是要注意的一点是Conten部分是不写任何代码的。Content是一个区域,举一个例子,Content部分就是一个桌子,咱们在上面放什么他才会显示什么。那么咱们应该放什么东西呢?
AppCan Frame
在讲Frame之前咱们先分析一下代码:
<div id="page_0" class="up ub ub-ver bc-bg" tabindex="0">
</div>
这个div的意义是声明了一个AppCan页面区域。上面所说的page。
<!--header开始-->
<div id="header" class="uh bc-text-head ub bc-head">
<div class="nav-btn" id="nav-left"></div>
<h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">AppCan</h1>
<div class="nav-btn" id="nav-right">
<!--按钮开始-->
<!--按钮结束-->
</div>
</div>
<!--header结束-->
这部分标志这一个头的开始和结束。就是上面所说的page中的head。
<!--content开始-->
<div id="content" class="ub-f1 tx-l ">
</div>
<!--content结束-->
这部分是咱们的内容区域,就是上面咱们所说的桌子,在这个区域什么也不写。
<div id="footer" class="uh bc-text-head ub bc-head">
<div class="nav-btn" id="nav-left"></div>
<h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">AppCan</h1>
<div class="nav-btn" id="nav-right">
<!--按钮开始-->
<!--按钮结束-->
</div>
</div>
这个是咱们的Footer,这个区域的内容比较灵活,如果需要就可以写,如果不需要的话可以直接删除。、
上面说了这么多,主要为了说明咱们的Content,Content部分什么也不写,他是由一个页面来嵌入从而形成一个页面的主体区域。而要嵌入的页面就是咱们的AppCan Frame。接着看代码:
<script>
appcan.ready(function() {
//获得page的header的高度
var titHeight = $('#header').offset().height;
//在距titHeight高度下打开一个新窗口,这个的话就可以保重Header和Content
//部分不重叠,不理解的可以把titHeight减去10个像素或者20个像素,看看效果。
appcan.frame.open("content", "index_content.html", 0, titHeight);
window.onorientationchange = window.onresize = function() {
appcan.frame.resize("content", 0, titHeight);
}
});
</script>
在xxx.html中通常会有几行这样的代码:具体意思请开代码注解。这是咱们怎么样打开一个AppCan Frame。
AppCan Frame 定义:AppCan Frame是内容展示的主体区域,Frame也是要给容器,在容器里面定义原生,动画等等。Frame是叠加在window之的,window关闭的时候,Frame也随之关闭。
其实如果使用模拟器调试工具进行调试的话,就会发现window和Frame之间的是通过一个iframe框架联系在一起的。在xxx.html内嵌xxx_content.html。从而形成一张完整的页面
知道了window和Frame之后,我们来看看怎么用。
打开一个页面(Window)
- 在IDE中新建AppCan空白页面,会生成xxx.html和xxx_content.html.
- 打开xxx_content.html,鼠标放在body区域,在IDE中找到 AppCan—插入控件—按钮—确定生成相应的html和js代码
//按钮的html
<div class="btn ub ub-ac bc-text-head ub-pc bc-btn" id="btn">
无图片按钮
</div>
//按钮所生成的
appcan.button(".btn", "ani-act", function() {
})
- 在按钮生成的js里面添加打开窗口的方法。
appcan.button(".btn", "ani-act", function() {
//appcan.window.open("自定义窗口名称","页面url");
appcan.window.open("details","details.html");
})
这样就可以打开一个新的窗口了,这个只是最基本的打开窗口的方法,其中的参数是最简单的配置,除此之外,还可以自定义其他参数,例如动画参数,窗口类型,打开窗口的宽高,动画执行时间等等参数,具体请查看文档。
打开一个页面(Frame)
- 按钮自己添加,咱们直接写语法:
//appcan.frame.open("自定义Frame窗口名称", "Frameurl", 左边据屏幕距离, 上边距屏幕距离);
appcan.frame.open("content", "index_content.html", 0, 0);
基本和appcan.window.open()格式差不多一样.
Appcan window 和 AppCan Frame 组合创建多窗口
- 在讲多窗口之前,我们先做一下准备工作:新建一个AppCan空白页(两个html页面),在xxx.html中Header结束的后面加上这段代码:
<!--header开始-->
<div id="header" class="uh bc-text-head ub bc-head">
<div class="nav-btn" id="nav-left"></div>
<h1 class="ut ub-f1 ulev-3 ut-s tx-c" tabindex="0">AppCan</h1>
<div class="nav-btn" id="nav-right">
<!--按钮开始-->
<!--按钮结束-->
</div>
</div>
//我们要加的代码
<div class="ub-f1" id="tabView">
</div>
<!--header结束-->
- 之后我们在id=tabView的div中添加tab标签,生成相应的html和js.这里不多说了。
- 下面我们来改动相应的js,在index.html中的有这样的一段js
appcan.ready(function() {
var titHeight = $('#header').offset().height;
//appcan.frame.open("content", "index_content.html", 0, titHeight);
window.onorientationchange = window.onresize = function() {
appcan.frame.resize("content", 0, titHeight);
}
});
- 我们首先要把appcan.frame.open方法注释掉,之后我们要添加下面的相应的方法。
appcan.ready(function() {
//获得标题栏的高和tabview的高度。
var titHeight = $('#header').offset().height;
var tabHeight=$('#tabview').offset().height;
//appcan.frame.open("content", "index_content.html", 0, titHeight);
appcan.frame.open({
id : "content",
url : [{
"inPageName" : "baidu",
"inUrl" : "http://www.baidu.com"
}, {
"inPageName" : "appcan",
"inUrl" : "http://www.appcan.cn"
}, {
"inPageName" : "sina",
"inUrl" : "http://www.sina.com.cn"
}],
top : titHeight+tabHeight,
left : 0,
index : 0,
change : function(err,res) {
tabview.moveTo(res.multiPopSelectedIndex);
}
})
window.onorientationchange = window.onresize = function() {
appcan.frame.resize("content", 0, titHeight);
}
});
//tab点击事件
tabview.on("click", function(obj, index) {
//设置多页面浮动窗口跳转到的子页面窗口的索引,文档有详细解释!
appcan.window.selectMultiPopover("content",index);
})
通过上面的设置,我们就可以实现一个多窗口了。
AppCan之界面通讯
在上面我们讲了都是关于窗口的一些知识,但是窗口之间并不都是孤立的。他们之间也是需要通讯的。AppCan窗口通讯主要是一下两种方式,一种是本地存储(locStorage),一种是窗口事件驱动。
AppCan界面通讯之本地存储
本地存储在html5中是一个新的js API,使用它我们可以已键值对的形式在用户的浏览器中保存数据。他和cookies非常相似。但又不尽相同:
- Cookies可以过期消失并且可以通过清理软件被清除,但是localStorage不会,除非你自己设置清除。放到webapp中就是除非你卸载软件或者手动设置清除。否则不会被清除。
- locStorage不会发送http请求。
- locStorage可以储存比Cookies更加多的数据。
- locStorage语法简单。
Appcan的本地存储是对JS原生本地存储的封装。使用起来仍然简单灵活。使用本地存储就可以实现我们界面之间参数的传递和处理。应用场景举例:
- 用户首次进入app需要登陆,第二次进入app不需要跳转到登陆界面,而是直接跳转到首页。
- 界面直接参数的传递。
- 用户登录demo,首先要先建2个AppCan页面.在一个页面的Frame(xxx_content.html)中添加登录表单。登录表单IDE已经封装好了,这里不再展示。注意:把登录表单生成的js删除,添加下面的js代码
//给提交按钮要给点击事件。
appcan.button("#submit","ani-act",function(){
})
- 之后的代码就是获得用户输入的值,验证登录信息跳转。
//在本地存一个值1,表示还没有登录
var loginflat=appcan.locStorage.val("loginflat",1);
var userName=$("#userName").val().trim();
var pwd=$("#pwd").val().trim();
if(userName=="tom"&&pwd=="123"){
//如果登录了,把这个值换成0
loginflat=appcan.locStorage.val("loginflat",0);
appcan.window.open("main","main.html");
}else{
alert("用户名和密码错误");
}
5. 在xxx.html中的ready方法中添加下面的代码:
//获得在本地的值
var login=appcan.locStorage.val("loginflat");
if(login==0){
//如果登录了几就直接打开首页
appcan.window.open("main","main.html");
}else{
//如果没有成功则打开登陆页
appcan.frame.open("content", "locStorage_content.html", 0, titHeight);
}
- ok可以打包测试了。
AppCan页面通讯之窗口事件驱动
上面我们说了locStorage,locStorage可以一个页面设置,多个页面使用,除了这种方法之外我们还用一种两个窗口直接传递值的方法:appcan.window.subscrible,appcan.window.publish。怎么用呢?
- subscribe和publish只能在已经打开的窗口见进行通信。什么意思?大家知道,当我们用appcan.window.open打开的时候不是把当前页面给关闭了,而是在当前的页面上重新打开了一个新的页面。这个时候,隐藏的那个页面还是打开的。这个时候这两个窗口之间是可以进行使用这两个方法。无论是多少个窗口,都要遵循这个原则。
- 案例demo:建立两个页面之间的通讯:从publish.html向subscribe.html发消息。建立两个AppCan页面(4个html页面)。在第一个subscribe_content.html中添加一个按钮,在click事件写上打开另一个窗口的方法.
appcan.button("#btn", "ani-act", function() {
appcan.window.open("p", "publish.html");
}) //这样就可以有两个打开的窗口了。
- 在subscribe.html中加上一下代码:
//给这个html定义一频道。
appcan.window.subscribe("index",function(msg){
alert(msg);
});
- 在publish_content.html新建一个按钮,在按钮的事件中写下面的代码:
appcan.button(".btn", "ani-act", function() {
appcan.window.publish("index","Hello world");
})
- 搞定,可以在模拟器上看看效果了。
AppCan之对话框
AppCan把在手机中常用的对话框,给进行了封装。
- appcan.window.alert;
appcan.window.alert({
title:"提示",
content:"测试内容",
buttons:['确定','取消','支持多个按钮']
});
appcan.window.openToast
appcan.window.openToast("显示的文字",3000(显示文字的时间,以毫秒为单位),8显示的位置);
appcan.window.prompt:
appcan.window.prompt({
title:"提示",
content:"请输入名字",
buttons:['确定','取消'],
callback:function(err,defaultVale,data,dataType,optid){
alert(typeof defaultVale);
console.log(defaultVale);
}
});
AppCan拖拽刷新
上面我们讲了window,frame,对话框,通过这些我们可以自己做一个好看的界面,但是,当你做列表页的时候是你会发现需要用到分页了,怎么办?AppCan对也进行了相关的处理。
实现分页
首选明确一点,所有的数据都是在列表页里面的,而列表页往往都是一个个的Frame,所以下面的代码都是放在Frame页面的ready方法里面的
appcan.ready(function() {
//在这里我主要说一下setBounce的几个参数,这里仅仅是个人意见,
//首先地一个参数,设置的是谈动的类型,如果上下都有弹动的话就写一个数组
//如果上下都有弹动的话那么只需要写一个就方法就好了,具体原理我还不清楚。
//以后补上吧。如果设置单个弹动的话只需要留空相应的方法就行了,
//当方法执行完毕之后别忘了回复默认弹动。
appcan.frame.setBounce([0, 1], null, null, function(type) {
alert("ss");
appcan.frame.resetBounce(type);
})
});
这样就可以实现上,下拉刷新。
以上就是JS SDK的随手笔记。以后会有按时更新。敬请留意!
版权声明:本文为博主原创文章,未经博主允许不得转载。
JS SDK 随手笔记的更多相关文章
- JS学习随手笔记
===================字符串===================== 字符串中间的空格也是要算长度的. 每一个字符都可以返回对应的Unicode 编码 文字的简单加密都是通过char ...
- js再学习笔记
#js再学习笔记 ##基本 1.js严格区分大小写 2.js末尾的分号可加,也可不加 3.六种数据类型(使用typeof来检验数据的类型) `typeof` - undefined: `var ...
- 关于js SDK的程序,java SDK的程序
一:JS SDK 1.修改配置workspace 2.导入 3.Demo.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Trans ...
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- 实战微信JS SDK开发:贺卡制作与播放(1)
前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...
- 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具
发布于 2013-12-04 作者 Eduard Koller 这次为我们使用Linux 的朋友带来了更多关于部署云上虚拟机的消息.今天,微软开放技术有限公司 (MS Open Tech),想与大家分 ...
- JS数组学习笔记
原文:JS数组学习笔记 最近在备课数组,发现很多ES5的方法平时很少用到.细节比较多,自己做了大量例子和整理,希望对大家了解JavaScript中的Array有所帮助. 概念 数组是值的有序集合.每个 ...
- 微信JS SDK接入的几点注意事项
微信JS SDK接入,主要可以先参考官网说明文档,总结起来有几个步骤: 1.绑定域名:先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”.备注:登录后可在“开发者中心”查看对 ...
- 公众号第三方平台开发 教程六 代公众号使用JS SDK说明
公众号第三方平台开发 教程一 创建公众号第三方平台 公众号第三方平台开发 教程二 component_verify_ticket和accessToken的获取 公众号第三方平台开发 教程三 微信公众号 ...
随机推荐
- UVa #11582 Colossal Fibonacci Numbers!
巨大的斐波那契数 The i'th Fibonacci number f (i) is recursively defined in the following way: f (0) = 0 and ...
- javascript 杂记
博客 http://www.cnblogs.com/onepixel/ http://www.cnblogs.com/ahthw/p/4240220.html#javascript call.appl ...
- 腾讯QQ认证空间4月27日已全面开放申请,欲进军自媒体
今天看到卢松松的博客上爆出,腾讯QQ认证空间4月27日已全面开放申请的消息,这一消息出来, 马浩周根据提示方法进行申请,下面先说说腾讯QQ认证空间的申请方法: QQ认证空间开放申请公告地址:http: ...
- Apache Kafka – KIP 32,33 Time Index
32, 33都是和时间相关的, KIP-32 - Add timestamps to Kafka message 引入版本,0.10.0.0 需要给kafka的message加上时间戳,这样更方便一些 ...
- WordPress基础:让搜索引擎及时更新文章
如果文章更新之后,想让搜索引擎也及时更新,你需要以下步骤 1.快速编辑文章时,勾选ping 2.设置->阅读,保证搜索引擎允许搜索 3.设置->撰写->添加url 通知url列表参考 ...
- h5网站和好看的动画网址
http://www.sucai888.com/data/batchzip/unzips/2165/index.html http://www.1000zhu.com
- ES6 基础知识
let:用来定义变量特点:只能在代码块里面使用,let拥有块级作用域;并且let不允许重复声明; 比如: var a = 12; var a = 5; alert(a); //5; let a = 1 ...
- JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码
近期,经常有人问 JMeter 3.0 使用时,生成的 HTML 报告图表中的中文乱码问题.在此,简略的说一下解决的方法. 编码相关信息如下: 1.查看控制 csv.xml 等配置结果文件生成.读取的 ...
- angularJs之内置服务
- C++学习笔记 宏 const 内联 枚举
宏, const变量, 内联, 枚举 宏 宏定义: 宏即宏替换,在C语言源程序中允许用一个标识符来表示一个字符串,称为宏,关键字 define,在所有使用到宏的地方都只是直接的替换而不做任何类型检查 ...