JavaScript实现移动端下拉刷新效果详解

作者:交互手记时间:2026-10-30 15:18:46浏览:236

本文介绍如何使用JavaScript在移动端实现简单的下拉刷新功能。通过监听touchstart、touchmove和touchend事件,结合CSS样式控制,模拟下拉提示及刷新还原过程。代码示例展示了核心逻辑,适用于Chrome模拟器或兼容的手机浏览器测试,为前端交互开发提供参考。

下拉刷新效果概述

最终实现了一个简单的页面下拉刷新功能,整体逻辑并不复杂。

该效果需要在仿真环境中查看,例如Chrome浏览器的开发者工具,或者在手机浏览器中打开。需要注意的是,部分手机浏览器可能存在兼容性问题,目前测试在猎豹手机浏览器上运行正常。

下拉刷新效果概述

下拉刷新效果概述

下拉刷新效果概述

下拉刷新效果概述

实现的核心流程主要包含以下几个阶段:

用户执行下拉动作,界面提示“松开刷新”;手指松开后,触发刷新逻辑;刷新完成后,界面状态还原。

HTML与CSS实现

HTML与CSS部分的代码结构如下:


style type="text/css">
 #slideDown{margin-top: 0;width: 100%;}
   #slideDown1,#slideDown2{width: 100%;height: 70px;;background: #e9f4f7;display: none;}
   #slideDown1{height: 20px;}
   #slideDown1>p,#slideDown2>p{margin: 20px auto;text-align:center;font-size: 14px;color: #37bbf5;}
</style>


 <div id="content">
  <div id="slideDown">
   <div id="slideDown1">
    <p>松开刷新</p>
   </div>
   <div id="slideDown2">
    <p>正在刷新 ...</p>
   </div>
  </div>
  <div class="myContent">
   <ul>
    <li>item1 -- item1 -- item1</li>
    <li>item2 -- item2 -- item2</li>
    <li>item3 -- item3 -- item3</li>
    <li>item4 -- item4 -- item4</li>
    <li>item5 -- item5 -- item5</li>
    <li>item6 -- item6 -- item6</li>
    <li>item7 -- item7 -- item7</li>
   </ul>
  </div>
 </div>

JavaScript核心逻辑

JavaScript核心逻辑部分如下:

主要操作是为特定节点绑定事件监听器,根据实际应用场景,可以绑定在整个body元素上。

核心函数k_touch()处理主要逻辑,目前涉及三个触摸事件:touchstart、touchmove和touchend。

在获取触摸点坐标时,使用pageX和pageY属性。如果浏览器不兼容,此处暂不作特殊处理。

由于仅在下拉时才触发刷新,因此需要对滑动方向进行控制,即通过判断是pageX还是pageY的变化来确定滑动方向。

在滑动过程中,可以直接观察dist变量的变化,该变量可视为像素值(px)的偏移量。

下拉刷新效果概述

更多的高级功能将在后续版本中逐步完善。


<script type="text/javascript">
 //第一步:下拉过程
 function slideDownStep1(dist){ // dist 下滑的距离,用以拉长背景模拟拉伸效果
  var slideDown1 = document.getElementById("slideDown1"),
   slideDown2 = document.getElementById("slideDown2");
  slideDown2.style.display = "none";
  slideDown1.style.display = "block";
  slideDown1.style.height = (parseInt("20px") - dist) + "px";
 }
 //第二步:下拉,然后松开,
 function slideDownStep2(){ 
  var slideDown1 = document.getElementById("slideDown1"),
   slideDown2 = document.getElementById("slideDown2");
  slideDown1.style.display = "none";
  slideDown1.style.height = "20px";
  slideDown2.style.display = "block";
  //刷新数据
  //location.reload();
 }
 //第三步:刷新完成,回归之前状态
 function slideDownStep3(){ 
  var slideDown1 = document.getElementById("slideDown1"),
   slideDown2 = document.getElementById("slideDown2");
  slideDown1.style.display = "none";
  slideDown2.style.display = "none";
 }

 //下滑刷新调用
 k_touch("content","y");
 //contentId表示对其进行事件绑定,way==>x表示水平方向的操作,y表示竖直方向的操作
 function k_touch(contentId,way){ 
  var _start = 0,
   _end = 0,
   _content = document.getElementById(contentId);
  _content.addEventListener("touchstart",touchStart,false);
  _content.addEventListener("touchmove",touchMove,false);
  _content.addEventListener("touchend",touchEnd,false);
  function touchStart(event){ 
   //var touch = event.touches[0]; //这种获取也可以,但已不推荐使用

   var touch = event.targetTouches[0];
   if(way == "x"){ 
    _start = touch.pageX;
   }else{ 
    _start = touch.pageY;
   }
  }
  function touchMove(event){ 
   var touch = event.targetTouches[0];
   if(way == "x"){ 
    _end = (_start - touch.pageX);
   }else{ 
    _end = (_start - touch.pageY);
    //下滑才执行操作
    if(_end < 0){
     slideDownStep1(_end);
    }
   }

  }
  function touchEnd(event){ 
   if(_end >0){ 
    console.log("左滑或上滑 "+_end);
   }else{ 
    console.log("右滑或下滑"+_end);
    slideDownStep2();
    //刷新成功则
    //模拟刷新成功进入第三步
    setTimeout(function(){ 
     slideDownStep3();
    },2500);
   }
  }
 }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

作者最新文章