|
缓存win复用win的js,解决openwin卡顿,包教不包会
[复制链接]
本帖最后由 老油条 于 2015-10-22 09:13 编辑
- <div class="blockcode"><blockquote>var myapi = '';
- (function() {
- var myapireadyDoSomething = [];
- apiready = function() {
- for (var i = 0; i < myapireadyDoSomething.length; i++) {
- myapireadyDoSomething[i]();
- }
- api.addEventListener({
- name: 'keyback'
- }, function(ret, err) {
- if (keyBackName != '') {
- hideWin();
- }
- })
- }
- function myapiready(c) {
- myapireadyDoSomething.push(c);
- }
- function openWin(d) {
- $api.setStorage(d.name + '_data', {
- pageParam: d.pageParam,
- keyBackName: api.winName
- });
- api.openWin({
- name: d.name,
- url: d.url
- });
- }
- var keyBackName = '';
- var viewAppear=[];
- function mydataReady(cb) {
- api.addEventListener({
- name: 'viewappear'
- }, function(ret, err) {
- for (var i=0;i<viewAppear.length;i++) {
- viewAppear[i]();
- }
- var dataForWin = $api.getStorage(api.winName + '_data');
- if(typeof(dataForWin)!='undefined'){
- keyBackName = dataForWin.keyBackName;
- $api.rmStorage(api.winName + '_data');
- return cb(dataForWin.pageParam, err);
- }else{
- return cb({}, err);
- }
- })
- }
- function vEvent(cb){
- viewAppear.push(cb);
- }
- function hideWin(){
- api.openWin({
- name: keyBackName,
- animation: {
- type: "push",
- subType: "from_left",
- duration: 300
- }
- })
- }
- myapi = {
- myapiready: myapiready,
- openWin: openWin,
- mydataReady: mydataReady,
- hideWin:hideWin,
- vEvent:vEvent
- }
- })()
复制代码
winA需要复用winB,或者winB需要多次利用。不推荐偶尔使用的win功能使用此js;
why myapi.js?
openWin的代价太高,需要重复使用的win并不需要每次close,open,reload=true体验也不好;这种体验就是卡卡卡卡卡卡卡卡卡卡。
how to use?
myapi.myapiready(function(){ doSomething();})的功能替代apiready,并且这个可以使用多次,都是能触发的;
myapi.openWin();打开win,与api.openwin的使用方法类似;支持name,url,pageParam
例如:
myapi.openWin({
name:'index',
url:'./html/index.html',
pageParam:{
test:'xxxxx'
}
});
myapi.mydataReady(function(ret,err) {doSomething(ret);}) 这是页面准备好以后出发的数据接收入口,ret为数据传过来的数据,相当于api.pageParam;
myapi.hideWin();把win切换到后面,作用是缓存,默认在keyback注册了该事件;
myapi.vEvent(function(){}) 暴露出viewappear事件 |
|