App的顶部一般有titlebar,下面是list。
常见的一个需求是要在list滚动时,titlebar不动。
这个简单的需求,实现起来其实并不简单。

在普通web上的做法是使用div的滚动条,把list放到div里。
但是很不幸的是,div滚动条在Android4.4以下的手机上非常非常卡,滚动完全无法商用。

还有一种做法是把titlebar使用fix来固顶。
但此时手机浏览器的滚动条会通到顶部,当titlebar的右侧出现滚动条时,看起来非常怪异。
还有一个副作用是滚动太快时,titlebar的div会下来一下又弹上去。

有人说使用iframe,但是手机上的iframe问题非常多,很多手机不支持iframe,还有些手机的iframe里只能运行部分js,不能执行plus api,这个坑填不起。

还有一种方法是使用自绘的滚动条,即不用浏览器的滚动条,自己画一个滚动条,iScroll等方案是采取这种思路。但模拟的始终是模拟的,和原生的滚动条效果还是差很多,在列表头和尾的拉动回弹的表现不佳,而且列表长了、内容复杂了,也会卡顿。

想要解决这个问题其实也不难,既然div的滚动条卡,而浏览器body的整体滚动条不卡,那就把屏幕切分成2个webview,把titlebar的HTML装载到一个webview里,list页面是另一个webview,list页面直接使用浏览器的滚动条而不是div滚动条,这样就可以得到一个流畅的列表滑动体验。
滑动感觉和原生一模一样,在列表头尾的拉动回弹也和原生一模一样。
双webview布局有并排、覆盖、嵌套几种做法:
- 1、嵌套:在main页面里create一个list页面,append为main的子页面,摆好位置。
嵌套是比较常用的,因为嵌套后的2个webview成为一个整体,这个页面需要左滑移出屏幕时,只需要操作父页面的动画,子页面会自动根据移动。而使用非嵌套方案,要单独操作每个webview的移动动画,不容易控制同步。
- 2、覆盖和并排一般情况下用不到。

以下为嵌套的示例代码。在main页面里create一个listcontend页面,盖在main的上面,摆好位置。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script type="text/javascript" charset="utf-8">
document.addEventListener("plusready",plusready,false);
function plusready () {
var pwListcontent = plus.webview.getWebviewById("listcontent");
if (pwListcontent) {
console.log("该webview已经存在,不重复创建");
}
else{
pwListcontent = plus.webview.create("listcontent.html","listcontent",{top:"44px",bottom:"0px"}) //创建名为listcontent的webview
plus.webview.currentWebview().append(pwListcontent)
}
}
</script>
</head>
<body>
<div style="text-align: center;">位于上面的webview里的title</div>
<hr />
<br /><br /><br /><br />
<div id="divloading" style="text-align: center;">正在加载...</div>
</body>
</html>

在mui框架里,通过mui的init里的subpage,可以通过配置而不是编码的方式更加简单的开发这种双webview界面

提升html5的性能体验系列之二列表流畅滑动的更多相关文章

  1. 提升HTML5的性能体验系列之二 列表流畅滑动

    App的顶部一般有titlebar,下面是list.常见的一个需求是要在list滚动时,titlebar不动.这个简单的需求,实现起来其实并不简单. 在普通web上的做法是使用div的滚动条,把lis ...

  2. 提升html5的性能体验系列之一避免切页白屏

    窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟 ...

  3. 提升HTML5的性能体验系列之一 避免切页白屏

    窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟 ...

  4. 提升html5的性能体验系列之三流畅下拉刷新

    下拉刷新 为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机(Android4.4以下)上,DIV动画经常出现卡顿现象(特别是图文列表的情况).解决方案还是web ...

  5. 提升HTML5的性能体验系列之三 流畅下拉刷新和上拉

    下拉刷新 为实现下拉刷新功能,大多H5框架都是通过DIV模拟下拉回弹动画,在低端android手机(Android4.4以下)上,DIV动画经常出现卡顿现象(特别是图文列表的情况).解决方案还是web ...

  6. 提升html5的性能体验系列之四使用原生ui

    原生UI即nativeUI的设计目的 HTML和css有一个优势就是灵活的样式设计.在大多数情况下,我们都应该使用HTML+css来负责UI.但是有些情况下,我们发现HTML+css的UI不满足需求. ...

  7. 提升HTML5的性能体验系列之五 webview启动速度优化及事件顺序解析

    webview加载时有5个事件.触发顺序为loading.titleUpdate.rendering.rendered.loaded.webview开始载入页面时触发loading,载入过程中如果&l ...

  8. 提升HTML5的性能体验系列之四 使用原生UI

    原生UI的设计目的 HTML和css有一个优势就是灵活的样式设计.在大多数情况下,我们都应该使用HTML+css来负责UI.但是有些情况下,我们发现HTML+css的UI不满足需求.1. 绝对置顶HT ...

  9. 提升html5的性能体验系列之五webview启动速度优化及事件顺序解析]

    webview加载时有3个事件.触发顺序为loading.titleUpdate.loaded.webview开始载入页面时触发loading,载入过程中如果title已经解析并赋予新值,则触发tit ...

随机推荐

  1. js 禁止重复提交

    /*分享按钮*/ var flag = true; $(".recommed a").click(function() { if (flag == true) { getServe ...

  2. Hibernate框架--关联映射,一对多,多对多 inverse cascade

    回顾Hibernate: 1. hibernate开发环境搭建 ----> 引入jar: hibernate.jar + required + jpa + 驱动包 ---> hiberna ...

  3. Java中精确的数字计算类BigDecimal

    在日常开放当中需要我们计算数字,利率.通常Java的做法是使用Math相关的API.但是,这样做是不够精确的,由于float和double不能进行计算,如果强行进行计算会使得计算不准确.造成难以挽回的 ...

  4. 【01-14】hibernate时间生成

    package rugal.sample.core.entity; import java.util.Date; import java.util.UUID; import javax.persist ...

  5. 高级CSS

    target="_black"新窗口打开,且打开第二个链接出来的页面覆盖第一个页面 .ui-pg-table td[dir="ltr"]{*width:94px ...

  6. CDN技术详解及实现原理

    CDN技术详解 一本好的入门书是带你进入陌生领域的明灯,<CDN技术详解>绝对是带你进入CDN行业的那盏最亮的明灯.因此,虽然只是纯粹的重点抄录,我也要把<CDN技术详解>的精 ...

  7. 《JS权威指南学习总结--1.2客户端JS》

    1.2客户端JS --本节讲述客户端JS部分各章节的讲述内容 一.第十三章讲述JS代码通过<script>标签来嵌入到HTML文件中. 二.第十四章讲解WEB浏览器脚本技术,并涵盖客户端J ...

  8. HDU1686:Oulipo

    Problem Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, w ...

  9. 解决win7和ubuntu双系统ubuntu不能上网的问题

    1.电脑基本配置如下. 我的电脑 戴尔 OptiPlex 9020 Mini Tower操作系统 Windows 7 专业版 64位 SP1 Ubuntu 14.04 2.装系统的过程不再赘述. 可以 ...

  10. 概率好题 Light OJ 1027

    题目大意:你在迷宫里,有n扇门,每个门有一个val,这个val可正可负,每次通过一扇门需要abs(x)分钟,如果这个门的val是正的,那么就直接出了迷宫,否则回到原地,问出去迷宫的期望是多少? 思路: ...