首页 >

JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)

web前端|js教程JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)
xmlplus,下拉刷新
web前端-js教程
xmlplus 是一个JavaScript框架,用于快速开发前后端项目。这篇文章主要介绍了xmlplus组件设计系列之选项卡,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
安卓图片编辑源码,pyqt嵌入vscode,ubuntu系统外接硬盘,tomcat添加应用,sqlite建表约束,二级城市插件jq,前端面向api框架,小说 爬虫 公众号,php的继承,seo-475波多野,腾讯云 网站模板,电脑网页素材,h5产品发布手机模板,dede js判断当前页面,java销售信息管理系统,百度知道小偷程序lzw
“下拉刷新”由著名设计师 Loren Brichter 设计,并应用于 Twitter 第三方应用 Tweetie 中。2010年4月,Twitter 收购 Tweetie 开发商 Atebits 后,该专利归 Twitter 所有。这一章我们就来看看如何实现一个简单的下拉刷新组件。
菠菜源码下载,vscode打开大文件崩溃,系统克隆ubuntu,tomcat部署环境验证,抢小米爬虫,php发布网源码,爱站工具seo综合查询推广lzw
JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)
外卖人8.4 app源码,怎么在vscode启用命令行,ubuntu启动死机,tomcat7 配置服务,爬虫背上白条,php批量压缩图片,网络seo关键词优化技术lzw
目标组件分析

和前面在设计组件时的做法一样,我们先想想看最终的成品组件是如何使用的,这需要点想像力。下拉刷新组件看成一个容器组件是合理的,用户可以对容器的内容进行下拉操作。如果用户完成了完整的下拉触发操作,该组件应该会有下拉完成的事件反馈,假定这个事件名为 ready。根据以上的分析,我们很有可能得到下面的一个该组件的应用示例。

Example1: {    xml: `             

Twitter

Loren Brichter `, fun: function (sys, items, opts) { sys.example.on("ready", () => console.log("ready")); }}

示例中的使用方式是非常简洁的,但我们还漏了一点。如果你用过一些新闻客户端,在某些情况下,此客户端会自动触发下拉刷新操作。比如,刚进入客户端页面或者由于软件推送机制产生的被动列表更新,这都将导致客户端下拉刷新操作的触发。所以如上的 PullRefresh 组件还应该提供一个触发自动刷新的操作接口。好了,下面是加入下拉刷新接口的应用示例。

Example2: {    xml: `             

Twitter

Loren Brichter `, fun: function (sys, items, opts) { sys.example.on("ready", () => console.log("ready")); sys.refresh.on("click", items.example.refresh); }}

基本框架

现在让我们把目光转移到下拉刷新组件的内部,看看该如何去实现。观察文章开始部分的大图,很自然地我们可以将整个组件划分为三个子组件,如下面的 XML 文档所示。

外围 p 元素包含两个子组件:其中一个是状态指示条,用于显示“下拉刷新”、“松开刷新”、“加载中…”以及“刷新成功”四个状态提示,这里暂时使用未定义的 Status 组件替代;另一个 p 元素用于容纳下拉刷新组件的包含内容。到现在,大概可以想得出该组件的工作逻辑了,于是我们可以给出下面的一个基本的组件框架。

PullRefresh: {    css: "#refresh { position: relative; height: 100%;...}",    xml: `

`, map: { appendTo: "content" }, fun: function (sys, items, opts) { sys.content.on("touchstart", e => { // 侦听 touchmove 和 touchend事件 }); function touchmove(e) { // 1 处理状态条与内容内面跟随触点移动 // 2 根据触点移动的距离显示相当的状态条内容 } function touchend(e) { // 1 移除 touchmove 和 touchend 事件 // 2 根据触点移动的距离决定返回原始状态或者进入刷新状态并派发事件 } }}

状态条的实现

如前面提到的,状态条组件包含四个状态提示,并且每一时刻仅显示一个状态。对于状态的切换,这里会先用到我们下一章将讲到的路由组件 ViewStack,这里仅需要了解如何使用即可。组件 ViewStack 对外只显示子级的一个子组件,同时侦听一个 switch 事件,该事件的派发者携带了一个切换到的目标对象的名称,也就是 ID。该组件根据这个 ID 来切换到目标视图。下面是状态条组件的完整实现。

Status: {    css: "#statusbar { height: 2.5em; line-height: 2.5em; text-align: center; }",    xml:             下拉刷新            松开刷新            加载中...            刷新成功         ,    fun: function (sys, items, opts) {        var stat = "pull";        function getValue() {            return stat;        }        function setValue(value) {            sys.statusbar.trigger("switch", stat = value);        }        return Object.defineProperty({}, "value", { get: getValue, set: setValue });    }}

该组件提供一个 value 接口用户设置与获取组件的显示状态。父级组件可根据不同的时机调用该接口。

最终实现

有了上面的储备,让我们来填充完下拉刷新组件的细节。下拉刷新过程中会涉及到动画,对于动画目前一般有两种选择,可以使用 JQuery 动画函数,也可以是 css3,这需要看各人喜好了。这里我们选择使用 css3 来实现。为清晰起见,下面的实现仅给出函数部分,其余部分同上。

PullRefresh: {    fun: function (sys, items, opts) {        var startY, height = sys.status.height();        sys.content.on("stouchstart", e => {            if (items.status.value == "pull") {startY = e.y;sys.content.on("touchmove", touchmove).on("touchend", touchend);sys.content.css("transition", "").prev().css("transition", "");            }        });        function touchmove(e) {            var offset = e.y - startY;            if ( offset > 0 ) {sys.content.css("top", offset + "px"); sys.status.css("top", (offset - height) + "px");items.status(offset > height ? "ready" : "pull");            }        }        function touchend (e) {            var offset = e.y - startY;            sys.content.off("touchmove").off("touchend");            sys.content.css("transition", "all 0.3s ease-in 0s").prev().css("transition", "all 0.3s ease-in 0s");            if ( offset  {sys.content.css("top", "0").prev().css("top", -height + "px");sys.content.once("webkitTransitionEnd", e => items.status.value = "pull");            }, 300);        }    }}

对于稍微有点复杂的组件,需要注意组件的组织归类,尽量把具有相近功能的组件放在一起。为了便于叙述,上述所列出的组件示意总把它们视作是同一目录,这一点读者应该能看出来。

【相关推荐】

1. 免费js在线视频教学

2. JavaScript中文参考手册

3. php.cn独孤九贱(3)-JavaScript视频教学


JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)
  • vue2.0 移动端实现下拉刷新和上拉加载更多的例子
  • vue2.0 移动端实现下拉刷新和上拉加载更多的例子 | vue2.0 移动端实现下拉刷新和上拉加载更多的例子 ...

    JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)
  • 浅谈小程序中实现下拉刷新与加载更多效果办法
  • 浅谈小程序中实现下拉刷新与加载更多效果办法 | 浅谈小程序中实现下拉刷新与加载更多效果办法 ...

    JavaScript框架(xmlplus)组件的介绍(六)下拉刷新(PullRefresh)
  • 浅谈小程序中下拉刷新和上拉加载功能怎么实现?(code)
  • 浅谈小程序中下拉刷新和上拉加载功能怎么实现?(code) | 浅谈小程序中下拉刷新和上拉加载功能怎么实现?(code) ...