iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >xmlplus组件如何实现下拉刷新
  • 753
分享到

xmlplus组件如何实现下拉刷新

2024-04-02 19:04:59 753人浏览 安东尼
摘要

这篇文章将为大家详细讲解有关xmlplus组件如何实现下拉刷新,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何实现一个简单的下拉刷新组件。目标组件分析和前面在设计组件时

这篇文章将为大家详细讲解有关xmlplus组件如何实现下拉刷新,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

如何实现一个简单的下拉刷新组件。

xmlplus组件如何实现下拉刷新

目标组件分析

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

Example1: {
 xml: `<PullRefresh id='example'>
    <h2>Twitter</h2>
    <h3>Loren Brichter</h3>
   </PullRefresh>`,
 fun: function (sys, items, opts) {
  sys.example.on("ready", () => console.log("ready"));
 }
}

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

Example2: {
 xml: `<PullRefresh id='example'>
    <h2>Twitter</h2>
    <h3>Loren Brichter</h3>
    <button id='refresh'>click</button>
   </PullRefresh>`,
 fun: function (sys, items, opts) {
  sys.example.on("ready", () => console.log("ready"));
  sys.refresh.on("click", items.example.refresh);
 }
}

基本框架

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

<div id="refresh">
 <Status id="status"/>
 <div id="content"></div>
</div>

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

PullRefresh: {
 CSS: "#refresh { position: relative; height: 100%;...}",
 xml: `<div id="refresh">
   <Status id="status"/>
   <div id="content"/>
   </div>`,
 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: <ViewStack id="statusbar">
   <span id="pull">下拉刷新</span>
   <span id="ready">松开刷新</span>
   <span id="loading">加载中...</span>
   <span id="success">刷新成功</span>
   </ViewStack>,
 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 < height ) {
    sys.content.css("top", "0").prev().css("top", -height + "px");
   } else {
    items.status.value = "release";
    sys.refresh.once("complete", complete);
    sys.content.css("top", height + "px").prev().css("top", "0").trigger("ready");
   }
  }
  function complete() {
   items.status.value = "message";
   setTimeout(() => {
    sys.content.css("top", "0").prev().css("top", -height + "px");
    sys.content.once("WEBkitTransitionEnd", e => items.status.value = "pull");
   }, 300);
  }
 }
}

关于“xmlplus组件如何实现下拉刷新”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

--结束END--

本文标题: xmlplus组件如何实现下拉刷新

本文链接: https://www.lsjlt.com/news/78522.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • xmlplus组件如何实现下拉刷新
    这篇文章将为大家详细讲解有关xmlplus组件如何实现下拉刷新,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。如何实现一个简单的下拉刷新组件。目标组件分析和前面在设计组件时...
    99+
    2024-04-02
  • AndroidFlutter实现自定义下拉刷新组件
    目录前言改造点DIY下拉组件样式刷新时机调整效果展示前言 在Flutter开发中官方提供了多平台的下拉刷新组件供开发者使用,例如RefreshIndicator和CupertinoS...
    99+
    2024-04-02
  • vue如何实现原生下拉刷新
    这篇文章给大家分享的是有关vue如何实现原生下拉刷新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 文字样式html代码<template>  <div class=&quo...
    99+
    2023-06-29
  • Iscrool如何实现下拉刷新功能
    这篇文章主要为大家展示了“Iscrool如何实现下拉刷新功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Iscrool如何实现下拉刷新功能”这篇文章吧。简易下...
    99+
    2024-04-02
  • Javascript如何实现下拉刷新功能
    这篇文章将为大家详细讲解有关Javascript如何实现下拉刷新功能,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Html相关代码<!DOCTYPE ht...
    99+
    2024-04-02
  • xmlplus如何实现Tree组件
    这篇文章给大家分享的是有关xmlplus如何实现Tree组件的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。树形组件是一种具有层级结构的组件,广泛应用于各种场景。数据源树形组件的数...
    99+
    2024-04-02
  • Vue移动端下拉刷新组件如何使用
    这篇“Vue移动端下拉刷新组件如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue移动端下拉刷新组件如何使用”文章吧...
    99+
    2023-07-06
  • MUI如何实现上拉刷新/下拉加载功能
    小编给大家分享一下MUI如何实现上拉刷新/下拉加载功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!新闻信息列表必备的功能,支持...
    99+
    2024-04-02
  • React-Native如何实现ListView组件之上拉刷新功能
    这篇文章给大家分享的是有关React-Native如何实现ListView组件之上拉刷新功能的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。思路:1、常量定义:const ...
    99+
    2024-04-02
  • vue实现原生下拉刷新
    本文实例为大家分享了vue实现原生下拉刷新的具体代码,供大家参考,具体内容如下 这是动画样式   文字样式 html代码 <template>  ...
    99+
    2024-04-02
  • react实现原生下拉刷新
    react是基于vue下拉刷新做了一个小小的改动,供大家参考,具体内容如下 我是用js写的 用jsx文件转化为jsx格式 ,如果用下载的react项目需要稍微改一下 html代码 &...
    99+
    2024-04-02
  • MUI如何实现上拉加载和下拉刷新效果
    这篇文章主要介绍了MUI如何实现上拉加载和下拉刷新效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。编写存储过程分页(此处使用T-SQL)C...
    99+
    2024-04-02
  • 基于vue封装下拉刷新上拉加载组件
    基于vue和原生javascript封装的下拉刷新上拉加载组件,供大家参考,具体内容如下 upTilte插槽是下拉刷新的自定义内容放的地方 downTilte插槽是...
    99+
    2024-04-02
  • Android 实现的下拉刷新效果
    下面是自己实现的效果: 1、分析 可以将动画分解成: 睁眼毛驴绕着中心地球旋转,并且在到达地球中心时,切换为闭眼毛驴,最后发射出去 地球自我旋转,随着下拉而缓缓上升,达到半径距离后...
    99+
    2024-04-02
  • html5如何封装下拉刷新
    这篇文章主要介绍了html5如何封装下拉刷新,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前端在工作当中难免会于原生的安卓和ios合作,去做一些H5嵌套的页面。但是实际开发中...
    99+
    2023-06-09
  • Flutter listview如何实现下拉刷新上拉加载更多功能
    目录下拉刷新 RefreshIndicator 上拉加载更多 总结:下拉刷新 在Flutter中系统已经为我们提供了google material design的刷新功能 , 样式...
    99+
    2024-04-02
  • Android如何通过XListView实现上拉加载下拉刷新功能
    小编给大家分享一下Android如何通过XListView实现上拉加载下拉刷新功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!具体内容如下## 导入XListVIew第三方库文件。通过LinkedList将刷新...
    99+
    2023-05-30
  • Android项目中使用SwipeRefreshLayout组件实现一个下拉刷新功能
    这篇文章给大家介绍Android项目中使用SwipeRefreshLayout组件实现一个下拉刷新功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。SwipeRefreshLayout概述SwipeRefrshLayo...
    99+
    2023-05-31
    swiperefresh android roi
  • 微信小程序tabBar组件切换与下拉刷新实现详解
    目录前言一、tabBar切换1.为什么使用tabBar2.注意事项3.如何使用二、下拉刷新前言 基本上,所有的小程序,页面底部都有个tab,来实现页面的切换,效果如下 一、tabB...
    99+
    2022-11-13
    微信小程序tabBar切换 小程序tabBar 微信下拉刷新
  • Ajax+Servlet如何实现无刷新下拉联动效果
    小编给大家分享一下Ajax+Servlet如何实现无刷新下拉联动效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!大类下拉框:页面加载的时候就初始化大类的下拉选项,通过后台代码去数据库里面...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作