移动端实现下拉刷新

第一部分:四个touch事件

  1.touchstart:只要将手指放在了屏幕上(而不管是几只),都会触发touchstart事件。

  2.touchmove: 当我们用手指在屏幕上滑动时,这个事件会被连续触发。 如果我们不希望页面随之滑动,我们可以使用event的preventDefault来阻止这个默认行为。

  3.touchend: 当手指滑动后离开屏幕,这时就触发了touchend事件。

  4.touchcancel: 系统停止跟踪触摸时候会触发。例如在触摸过程中突然页面alert()一个提示框,此时会触发该事件,这个事件比较少用。

  

第二部分:四个touch对象

   1. touches,这是一个类数组对象,包含了所有的手指信息,如果只有一个手指,那么我们用touches[0]来表示。

   2. targetTouches 。 手指在目标区域的手指信息。

3. changedTouches:最近一次触发该事件的手指信息。

4. touchend时,touches与targetTouches信息会被删除,changedTouches保存的最后一次的信息,最好用于计算手指信息。

第三部分:实例1

  先看效果图:

    

  它的实现原理非常简单,就是将红色圆形的postion属性设为absolute,然后,当我们滑动它时,就触发了touchmove事件,将其Left和top设置为event的pageX和pageY即可,为保证触发中心与圆心在同一位置,只需将pageX加上width的一半,pageY加上height的一半。

  源码如下:

<!DOCTYPE html>
<html>
<head>
    <title>touchExample</title>
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
    <style>
        #touchDiv{
            position: absolute;
            width: 50px;
            height: 50px;
            top: 20px;
            left: 20px;
            text-align: center;
            line-height: 50px;
            color:white;
            border-radius: 50%;
            background-color: red;
        }    </style>
</head>
<body>
    <div id="touchDiv">点我</div>
    <script>        var touchDiv = document.getElementById("touchDiv");        var x,y;
        touchDiv.addEventListener("touchstart",canDrag);
        touchDiv.addEventListener("touchmove",drag);
        touchDiv.addEventListener("touchend",nodrag);
        function canDrag (e) {
            console.log("god开始");
        }
        function drag (e) {
            $("#touchDiv").css("left",e.touches[0].pageX-25);
            $("#touchDiv").css("top",e.touches[0].pageY-25);
        }
        function nodrag () {
            console.log("god结束");
        }    </script>
</body>
</html>

  

第四部分:实例2

  这个实例就是下拉刷新功能的实现,效果如下:

  

源码如下:

<!DOCTYPE html>
<html>
<head>
    <title>下拉刷新</title>
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0">
    <style>
        *{
            margin:0;
            padding: 0;
            font-size:15px;
        }
        .header{
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: blue;
            color:white;
            font-size: 23px;
        }
        .drag_to_refresh{
            align-items: center;
            padding-left: 155px;
            background-color: #bbb;
            color:yellow;
            display: none;
        }
        .refresh{
            height: 50px;
            line-height: 50px;
            text-align: center;
            background-color: #bbb;
            color: green;
            display: none;
        }
        .drag{
            text-align: center;
            background-color: lightgray;
            position: relative;
            padding:20px;
            text-indent: 1em;
            line-height: 30px;
            font-size:18px;
        }    </style>
</head>
<body>
    <div class="header">政务云</div>
    <div class="drag_to_refresh"></div>
    <div class="refresh">刷新中...</div>
    <div class="drag">电子政务云(E-government cloud)属于政府云,结合了云计算技术的特点,对政府管理和服务职能进行精简、优化、整合,并通过信息化手段在政务上实现各种业务流程办理和职能服务,为政府各级部门提供可靠的基础IT服务平台。</div>
<script>window.onload = function () {    var initX;    var drag_content = document.querySelector(".drag");    var drag_to_refresh = document.querySelector(".drag_to_refresh");    var refresh = document.querySelector(".refresh");

    drag_content.addEventListener("touchmove",drag);
    drag_content.addEventListener("touchstart",dragStart);
    drag_content.addEventListener("touchend",dragEnd);

    function dragStart(e){
        initY = e.touches[0].pageY;
        console.log(initX);
    }

    function drag (e){
        drag_to_refresh.style.display = "block";
        drag_to_refresh.style.height = (e.touches[0].pageY - initY) + "px";
        console.log(drag_to_refresh.style.height);        if(parseInt(drag_to_refresh.style.height)>=100){            // 注意:因为height得到的值是px为单位,所以用parseInt解析
            drag_to_refresh.style.height = "100px";            if(parseInt(drag_to_refresh.style.height)>80){
                drag_to_refresh.style.lineHeight = drag_to_refresh.style.height;
                drag_to_refresh.innerHTML  = "松开刷新";
            }
        }
    }

    function dragEnd (e){        if(parseInt(drag_to_refresh.style.height)>80){
            refresh.style.display = "block";
            setTimeout(reload,1000);
        }
        drag_to_refresh.style.display = "none"; 
    }

    function reload () {
        location.reload();
    }
}</script>
</body>
</html>

时间: 2024-08-07 00:16:56

移动端实现下拉刷新的相关文章

vue2.0 移动端,下拉刷新,上拉加载更多插件,修改版

在[实现丰盛]的插件基础修改[vue2.0 移动端,下拉刷新,上拉加载更多 插件], 1.修改加载到尾页面,返回顶部刷新数据,无法继续加重下一页 2.修改加载完成文字提示 原文链接:http://www.cnblogs.com/sichaoyun/p/6647458.html <template lang="html"> <div class="yo-scroll" :class="{'down':(state===0),'up':(st

vue2.0 移动端,下拉刷新,上拉加载更多 插件

本人正在基于 vue2.0 + webpack + es6 搭建前端架构,整理了部分插件,下面这个是下拉更新 上拉更多的,挺好用的,分享给大家. 直接上代码,不懂的多看几遍,下面我换会告诉大家如何使用. <template lang="html"> <div class="yo-scroll" :class="{'down':(state===0),'up':(state==1),refresh:(state===2),touch:tou

移动端网页下拉刷新

一.采用触摸事件touchmove. 1.定义公共变量 var timer = null; var startY, moveY, initTop, oldTop, newTop; 2.添加事件 $('#container ul').on('touchstart', function(e){ startY = e.originalEvent.touches[0].pageY; initTop = 0; }); $('#container ul').on('touchmove', function(

移动端touch实现下拉刷新

移动端实现下拉刷新 第一部分:四个touch事件 1.touchstart:只要将手指放在了屏幕上(而不管是几只),都会触发touchstart事件. 2.touchmove: 当我们用手指在屏幕上滑动时,这个事件会被连续触发. 如果我们不希望页面随之滑动,我们可以使用event的preventDefault来阻止这个默认行为. 3.touchend: 当手指滑动后离开屏幕,这时就触发了touchend事件. 4.touchcancel: 系统停止跟踪触摸时候会触发.例如在触摸过程中突然页面al

移动端下拉刷新原理和实例

移动端的下拉刷新是一个很常见的功能,也有许多开源库实现了这个功能,不过为了学习,还是先自己写一个例子学习一下.其中用到了一些touch事件和一些DOM属性CSS3属性.直接上代码,代码里面有注释. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件

vue10行代码实现上拉翻页加载更多数据,纯手写js实现下拉刷新上拉翻页不引用任何第三方插件/库 一提到移动端的下拉刷新上拉翻页,你可能就会想到iScroll插件,没错iScroll是一个高性能,资源占用少,无依赖,多平台的javascript滚动插件.iScroll不仅仅是 滚动.它可以处理任何需要与用户进行移动交互的元素.在你的项目中包含仅仅4kb大小的iScroll,你的项目便拥有了滚动,缩放,平移,无限滚动,视差滚动,旋转功能.iScroll的强大毋庸置疑,本人也非常欢迎大家使用iScr

JS实现移动端下拉刷新更多分页请求功能方法2.0

本次2.0升级版为js实现移动端加载更多下拉刷新更多分页请求功能方法(数据一次请求,前端分页,适用于数据流量较少,数据量压力小的页面)同时新增loading组件,turnToTop组件. 本文原创非转载,如需转载请注明出处:http://www.cnblogs.com/A-QBlog/p/7068959.html 废话不多说,直接上代码: 1 ;(function (w, $) { 2 3 var loadmore = { 4 /*单页加载更多 通用方法 5 * 6 * @param callb

关于移动端手势滑动和上拉加载下拉刷新简单模拟笔记

本人接触前端不久,写的不好的请多多指教,欢迎指出 最近做到一个需求需要实现移动端的手势操作,在网上有找到不少不错的插件(PS:就不打广告了,一搜一大堆) 插件用起来确实不错,不过自己想研究下,便写了一个demo,实现了上拉.下拉触发,及左右手势滑动触发 上拉.下拉触发用了 $(window).scroll()                //当滚动条滚动时触发 scrollTop()(滚动条距离顶部的高度) $(document).height(当前页面的总高度) $(this).height

better-scroll 上拉加载,下拉刷新(解决移动端长页面卡顿)

一.Better Scroll 滚动原理 1.下图能直观的表示better-scroll的滚动原理 2.html设置 <div class="wrapper"> <ul class="content"> <li>...</li> <li>...</li> ... </ul> <!-- 这里可以放一些其它的 DOM,但不会影响滚动 --> </div> 3.js