Browse Source

优化单页面功能实现

guohh 8 years ago
parent
commit
86fa9de807
4 changed files with 62 additions and 32 deletions
  1. 3 3
      demo/js/biz/page-modal.js
  2. 31 4
      src/js/modal.js
  3. 21 23
      src/js/pages.js
  4. 7 2
      src/sass/ipu/component/pages.scss

+ 3 - 3
demo/js/biz/page-modal.js

@ -60,10 +60,10 @@ require(["ipu", "jquery"], function (ipu, $) {
60 60
        });
61 61
62 62
        $content.on('click', '.showPreloader', function () {
63
            ipu.showPreloader('正在加载中');
64
            setTimeout(function () {
63
            ipu.showPreloader('正在加载中', 300);
64
            //setTimeout(function () {
65 65
                ipu.hidePreloader();
66
            }, 3000);
66
            //}, 3000);
67 67
        });
68 68
        $content.on('click', '.showIndicator', function () {
69 69
            ipu.showIndicator();

+ 31 - 4
src/js/modal.js

@ -132,17 +132,44 @@
132 132
        });
133 133
    };
134 134
135
    ipu.showPreloader = function (title) {
136
        ipu.hidePreloader();
135
    var minLoad = false;        // 是否最小时间调用方式
136
    var loadOverTime = false;   // 是否超过最小调用时间
137
    var loadEnd = false;        // 是否调用结束
138
    var loadTimeOut = null;     // 延时调用ID
139
140
    ipu.showPreloader = function (title, minTime) {
141
        ipu.hidePreloader(true);
142
137 143
        ipu.showPreloader.preloaderModal = ipu.modal({
138 144
            title: title || defaults.modalPreloaderTitle,
139 145
            text: '<div class="ui-preloader"></div>'
140 146
        });
141 147
148
        if(minTime){
149
            minLoad = true;
150
            loadTimeOut = setTimeout(function () {
151
                loadOverTime = true;
152
                if(loadEnd){
153
                    ipu.hidePreloader();
154
                }
155
            }, minTime);
156
        }
157
142 158
        return ipu.showPreloader.preloaderModal;
143 159
    };
144
    ipu.hidePreloader = function () {
145
        ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);
160
    ipu.hidePreloader = function (force) {
161
        if(force || !minLoad || (minLoad && loadOverTime)){
162
            if(force && loadTimeOut){
163
                window.clearTimeout(loadTimeOut);
164
            }
165
            ipu.showPreloader.preloaderModal && ipu.closeModal(ipu.showPreloader.preloaderModal);
166
            minLoad = false; // 重置各标志位
167
            loadOverTime = false;
168
            loadEnd = false;
169
            loadTimeOut = null;
170
        }else{
171
            loadEnd = true;
172
        }
146 173
    };
147 174
    ipu.showIndicator = function () {
148 175
        if ($('.ui-preloader-indicator-modal')[0]) return;

+ 21 - 23
src/js/pages.js

@ -70,22 +70,20 @@
70 70
71 71
    page.options = {     // 那个窗口执行open,默认父窗口
72 72
        target: window.parent, // 默认执行父窗口
73
        backIndex: 1,    // 默认回退一页
74
        closeIndex: 1,   // 默认关闭最近一个页面
73
        backIndex: -1,    // 默认回退一页
74
        closeIndex: -1,   // 默认关闭最近一个页面
75 75
        params:{},        // post的默认参数
76 76
        animate: true,     // 是否动画效果
77 77
        showLoading: true,   // 是否显示加载消息
78 78
        loadingMessage: '正在加载中',
79 79
        method : null,     // 请求方式,用户不需要设置
80
        minMessageTime: 50, // 最小显示加载时间
80
        minMessageTime: 500, // 最小显示加载时间,避免出现闪现的情况
81 81
        callBack:function () { // 事件回调
82 82
        }
83 83
    };
84 84
85 85
    // 当前页面加载,针对顶层父窗口
86 86
    page.openPage = function (url, options) {
87
        var overTime = false; // 超过100ms豪秒
88
        var transEnd = false; // 动画结束
89 87
        var newPage = null;
90 88
        var nowPageNo = pageIdPrefix + (pageNo++);
91 89
        maps[nowPageNo] = url;
@ -93,14 +91,7 @@
93 91
        checkPages();
94 92
95 93
        if(options.showLoading){
96
            ipu.showPreloader(options.loadingMessage);
97
98
            setTimeout(function () {
99
                overTime = true;
100
                if (transEnd) {
101
                    ipu.hidePreloader();
102
                }
103
            }, options.minMessageTime);  // 保证最少显示100ms,不出现闪现的情况
94
            ipu.showPreloader(options.loadingMessage, options.minMessageTime);
104 95
        }
105 96
106 97
        if(options.method == 'post'){
@ -117,11 +108,7 @@
117 108
118 109
        function end() {
119 110
            if(options.showLoading) {
120
                if (!overTime) {
121
                    transEnd = true;
122
                } else {
123
                    ipu.hidePreloader();
124
                }
111
                ipu.hidePreloader();
125 112
            }
126 113
127 114
            if(options.animate) {
@ -135,7 +122,7 @@
135 122
        }
136 123
137 124
        $(".ui-page-iframe", newPage).one('load', function () {
138
            newPage.addClass("ui-show");
125
            newPage.addClass("ui-show").width(); // 强制生效,否则可能出现页面闪现,无动画情况
139 126
140 127
            if(firstPage){
141 128
                animatePage.removeClass("ui-pages-first");
@ -168,9 +155,13 @@
168 155
169 156
        if(backIndex == 0){
170 157
            page = $(".ui-page:first", pagesObj);
171
        }else {
158
        }else { // 越界的情况
172 159
            var prevPage = nowPage.prevAll(".ui-page");
173
            page= $(prevPage[options.backIndex - 1]);
160
            if(backIndex < 0){
161
                page= $(prevPage[backIndex + 1]);
162
            }else{
163
                page= $(prevPage[prevPage.size() + backIndex - 2]);
164
            }
174 165
        }
175 166
176 167
        var animatePage = nowPage;
@ -220,8 +211,15 @@
220 211
221 212
    // 往前关闭窗口
222 213
    page.closePage = function (options) {
223
        var closePage = options.closeIndex - 1;
224
        var prevPage = $(".ui-page.ui-show").prevAll(".ui-page");
214
        var closePage = options.closeIndex;
215
        var prevPage = $(".ui-page.ui-show", pagesObj).prevAll(".ui-page");
216
217
        if(closePage < 0){
218
            closePage = closePage + 1;
219
        }else{
220
            closePage = prevPage.size() - 1 + closePage - 1;
221
        }
222
225 223
        $(prevPage[closePage]).remove();
226 224
        if(options.callBack){
227 225
            options.callBack();

+ 7 - 2
src/sass/ipu/component/pages.scss

@ -5,8 +5,8 @@
5 5
    left:0;
6 6
    right: 0;
7 7
    bottom: 0;
8
    overflow: hidden;
9 8
    z-index: 0;
9
    overflow: hidden;
10 10
}
11 11
.ui-pages{
12 12
    z-index: 10000;
@ -37,12 +37,17 @@
37 37
    z-index: 1;
38 38
    display: block;
39 39
}
40
.ui-pages, .ui-page{
41
    &.ui-anim{
42
        overflow: auto;
43
        box-shadow:-0.01rem 0rem rgba(0,0,0,.6);
44
    }
45
}
40 46
.ui-anim{
41 47
    animation-duration: $ts-time;
42 48
    animation-fill-mode: both;
43 49
    animation-timing-function: ease-in-out;
44 50
}
45
46 51
@-webkit-keyframes slideRightIn {
47 52
    0% { transform: translate3d(100%,0,0)}
48 53
    100% { transform: translate3d(0%,0,0) }