带loading中间态的视图

如果想异步去加载视图内容,在视图内容未加载完成前出现loading界面请参考这个例子的用法。

请在移动浏览器或打开chrome开发人员工具模拟移动浏览器查看demo。

Source
Output
QRCode
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no"> <link href="//g.alicdn.com/kissy/k/5.0.1/css/base.css" rel="stylesheet"/> <link href="//g.alicdn.com/kissy/k/5.0.1/navigation-view/assets/dpl.css" rel="stylesheet"> <link href="//g.alicdn.com/kissy/k/5.0.1/scroll-view/assets/dpl.css" rel="stylesheet"/> <style> body,html { height: 100%; } .ks-navigation-bar { position: fixed; height: 47px; width: 100%; box-sizing: border-box; z-index: 10; } .ks-navigation-view-content { margin-top: 47px; } ul, li { margin: 0; padding: 0; } .nav { color: #000; background: white; border: 1px solid #aaa; padding-left: 0; } .nav > li { text-indent: 0; font-size: 1.5em; margin: 0; display: block; position: relative; list-style-type: none; vertical-align: middle; box-sizing: border-box; padding: .5em .7em; padding-left: 1em; line-height: 1.6em; overflow: hidden; color: #000; border: 0; background: transparent; border-radius: 0; border-top: 1px solid rgba(180, 180, 180, 0.5); } .nav > li:first-child { border-top: 0; } .nav a { line-height: inherit; text-decoration: none; margin: -0.5em -0.7em; margin-left: -1em; padding-left: 1em; color: #000; display: block; position: relative; list-style-type: none; vertical-align: middle; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; padding: .5em .7em; } .nav a:after { -webkit-text-fill-color: #fff; -webkit-transform: rotate(45deg); vertical-align: middle; margin-left: -0.2rem; border-style: solid; border-color: #777; content: "\a0"; display: block; position: absolute; right: 1rem; top: 50%; margin-top: -0.32rem; color: #999ea9; width: .66rem; height: .64rem; border-width: 0; -webkit-box-shadow: inset -0.2rem .2rem 0 #999ea9; box-shadow: inset -0.2rem .2rem 0; } .nav .list-item-active a { background: #d9d9d9; } .ks-navigation-view-content { background: #eeeeee; } .anim-title { text-align: center; font-size: 18px; line-height: 24px; color: #444; text-shadow: rgba(255, 255, 255, 0.3) 0 1px 0; padding: 10px; width: 75%; margin: 0 auto; } .anim-content { text-align: center; font-size: 18px; line-height: 24px; color: #444; text-shadow: rgba(255, 255, 255, 0.3) 0 1px 0; padding: 10px; width: 75%; margin: 0 auto; } .ks-navigation-view-content > .ks-navigation-view-loading.ks-navigation-view-loading-hidden, .ks-navigation-view-content > div.ks-index-view-hidden, .ks-navigation-view-content > div.ks-view-with-loading-hidden{ display: none; } .after-loading{ text-align: center; font-size: 20px; font-weight: bold; margin-top: 50px; } </style> </head> <body> <script src="//g.alicdn.com/kissy/k/5.0.1/seed-debug.js"></script> <script> require(['navigation-view','navigation-view/bar', 'component/control', 'node', 'promise'],function (NavigationView, Bar, Control, $, Promise) { var win = $(window); var navigationView = new NavigationView({ loadingHtml: '<div class="ks-navigation-view-loading-outer">' + '<div class="ks-navigation-view-loading-inner"></div>' + '</div>', //设置loading内容 render: 'body' }).render(); var bar = new Bar({ navigationView: navigationView, elBefore: navigationView.get('contentEl') }).render(); var IndexView = Control.extend({ createDom : function(){ this.get('el').html('<ul class="nav"><li class="list-item">View with Loading</li></ul>'); }, bindUI : function(){ this.get('el').delegate('click', '.list-item', this.goNextView, this); }, goNextView : function(ev){ navigationView.push({ xclass : 'view-with-loading', title : 'view with loading' }) } },{ xclass : 'index-view' }); var ViewWithLoading = Control.extend({ enter : function(){ var self = this; self.defer = new Promise.Defer(); //给view设置defer/promise才会在页面未加载完的出现loading界面 self.promise = self.defer.promise; win.on('resize', self.sync, self); setTimeout(function(){ //异步执行。可以是Ajax去获取页面内容等 self.get('el').html('<div class="after-loading">after loading...</div>'); self.defer.resolve(); //通知loading结束 },1500) }, },{ xclass : 'view-with-loading' }); navigationView.push({ xclass : 'index-view', title : 'IndexView' }); }); </script> </body> </html>