原生js及jq在移动网站上滑动实现实例

jQuery在移动设备上支持滑动事件的方法

原jQuery并没有对移动Web做很好的支持,比如滑动事件。在使用下拉刷新、轮播图移动等操作时,都需要用到滑动事件,这里推荐一个jQuery插件TouchSwipe-Jquery-Plugin。

Github地址:https://github.com/mattbryson/TouchSwipe-Jquery-Plugin

Github及官方文档上已经做了详细的介绍,这里简单的说一下滑动操作的基本功能。

    $(function() {      
          //Enable swiping...
          $("#test").swipe( {
            //Generic swipe handler for all directions
            swipe:function(event, direction, distance, duration, fingerCount, fingerData) {
              $(this).text("You swiped " + direction );  
            },
            //Default is 75px, set to 0 for demo so any distance triggers swipe
             threshold:0
          });
        });

引入了jQuery库和TouchSwipe后,可以使用上面的代码检测到滑动事件,其中的direction指方向,有'up', 'down', 'left', 'right' 而distance指滑动距离。下面的threshold指的是触发范围,既最小滑动多少才触发,注意,实际使用时,一般不能为0,因为设置为0将覆盖click, tap等点击操作。如果要检测整个页面的滑动,可以把#test改为body。

原生Javascript实现手机网站滑动事件代码

下经过本人测试成功。

测试平台:三星S5830I

操作系统:Android 2.3.6

浏览器:UC浏览器

HTML标准:HTML5

 
测试了三个事件:touchstart、touchmove 和 touchend,并获取了触摸时触点在页面上的坐标,根据坐标进行了左右滑动、上下滑动判断。

代码如下:

 

   <!-- HTML5 -->  
    <!DOCTYPE html>  
    <html>  
        <head>  
            <title>TouchEvent测试</title>  
            <meta charset="gbk">  
        </head>  
        <body>  
            <h2>TouchEvent测试</h2>  
            <br />  
            <div id="version" style="border:2px solid black;background-color:yellow"></div>  
            <br />  
            <br />  
            <br />  
            <br />  
            <br />  
            <br />  
            <div id="result" style="border:2px solid red; color:red;">未触发事件!</div>  
            <div id="test" style="border:2px solid red">  
                <ul>  
                    <li id="li1">测试条目1</li>  
                    <li id="li2">测试条目2</li>  
                    <li id="li3">测试条目3</li>  
                    <li id="li4">测试条目4</li>  
                    <li id="li5">测试条目5</li>  
                    <li id="li6">测试条目6</li>  
                    <li id="li7">测试条目7</li>  
                    <li id="li8">测试条目8</li>  
                    <li id="li9">测试条目9</li>  
                    <li id="li10">测试条目10</li>  
                    <li id="li11">测试条目11</li>  
                    <li id="li12">测试条目12</li>  
                    <li id="li13">测试条目13</li>  
                    <li id="li14">测试条目14</li>  
                    <li id="li15">测试条目15</li>  
                    <li id="li16">测试条目16</li>  
                    <li id="li17">测试条目17</li>  
                    <li id="li18">测试条目18</li>  
                    <li id="li19">测试条目19</li>  
                    <li id="li20">测试条目20</li>  
                </ul>  
            </div>  
              
            <script type="text/javascript">  
                //全局变量,触摸开始位置  
                var startX = 0, startY = 0;  
                  
                //touchstart事件  
                function touchSatrtFunc(evt) {  
                    try  
                    {  
                        //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
      
                        var touch = evt.touches[0]; //获取第一个触点  
                        var x = Number(touch.pageX); //页面触点X坐标  
                        var y = Number(touch.pageY); //页面触点Y坐标  
                        //记录触点初始位置  
                        startX = x;  
                        startY = y;  
      
                        var text = 'TouchStart事件触发:(' + x + ', ' + y + ')';  
                        document.getElementById("result").innerHTML = text;  
                    }  
                    catch (e) {  
                        alert('touchSatrtFunc:' + e.message);  
                    }  
                }  
      
                //touchmove事件,这个事件无法获取坐标  
                function touchMoveFunc(evt) {  
                    try  
                    {  
                        //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
                        var touch = evt.touches[0]; //获取第一个触点  
                        var x = Number(touch.pageX); //页面触点X坐标  
                        var y = Number(touch.pageY); //页面触点Y坐标  
      
                        var text = 'TouchMove事件触发:(' + x + ', ' + y + ')';  
      
                        //判断滑动方向  
                        if (x - startX != 0) {  
                            text += '<br/>左右滑动';  
                        }  
                        if (y - startY != 0) {  
                            text += '<br/>上下滑动';  
                        }  
      
                        document.getElementById("result").innerHTML = text;  
                    }  
                    catch (e) {  
                        alert('touchMoveFunc:' + e.message);  
                    }  
                }  
      
                //touchend事件  
                function touchEndFunc(evt) {  
                    try {  
                        //evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等  
      
                        var text = 'TouchEnd事件触发';  
                        document.getElementById("result").innerHTML = text;  
                    }  
                    catch (e) {  
                        alert('touchEndFunc:' + e.message);  
                    }  
                }  
      
                //绑定事件  
                function bindEvent() {  
                    document.addEventListener('touchstart', touchSatrtFunc, false);  
                    document.addEventListener('touchmove', touchMoveFunc, false);  
                    document.addEventListener('touchend', touchEndFunc, false);  
                }  
      
                //判断是否支持触摸事件  
                function isTouchDevice() {  
                    document.getElementById("version").innerHTML = navigator.appVersion;  
      
                    try {  
                        document.createEvent("TouchEvent");  
                        alert("支持TouchEvent事件!");  
      
                        bindEvent(); //绑定事件  
                    }  
                    catch (e) {  
                        alert("不支持TouchEvent事件!" + e.message);  
                    }  
                }  
      
                window.onload = isTouchDevice;  
        </script>  
        </body>  
    </html>

 

下面是jQuery Mobile实现上下滑动的方式:

jQuery Mobile左右滑动事件:swipe(水平滑动30px以上时触发)、swipeLeft(向左滑)、swipeRight(向右滑)

jQuery Mobile垂直滑动事件:scrollstart(上下滚动)、scrollend(滚动停止)

jQuery Mobile触摸点击事件:tap(快速触碰)、taphold(触碰并保持750ms以上触发)

  

  <!DOCTYPE html>  
    <html>  
        <head>  
            <title>Ajax测试</title>  
            <meta charset="gbk">  
            <meta name="viewport" content="width=device-width, initial-scale=1">  
            <link rel="stylesheet" href="jquery-mobile/jquery.mobile-1.2.0.min.css"/>  
            <link rel="stylesheet" href="jquery-mobile/jquery.mobile.structure-1.2.0.min.css"/>  
            <script src="jquery-mobile/jquery-1.8.2.min.js"></script>  
            <script src="jquery-mobile/jquery.mobile-1.2.0.min.js"></script>  
        </head>  
        <body>  
            <div data-role="page" data-theme="b">  
            <div data-role="header"></div>  
            <div data-role="content">  
                <script>  
                    //scrollstart事件  
                    function scrollstartFunc(evt) {  
                        try  
                        {  
                            var target = $(evt.target);  
                            while (target.attr("id") == undefined) {  
                                target = target.parent();  
                            }  
                            //获取触点目标id属性值  
                            var targetId = target.attr("id");  
      
                            alert("targetId: " + targetId);  
                        }  
                        catch (e) {  
                            alert('myscrollfunc:' + e.message);  
                        }  
                    }  
      
                    function myinit() {  
                        //绑定上下滑动事件  
                        $("#myul").bind('scrollstart', function () { scrollstartFunc(event); });  
                    }  
      
                    window.onload = myinit;  
                </script>  
      
                <!-- listview测试 -->  
                <ul id="myul" data-role="listview" data-inset="true">  
                    <li data-role="list-divider">信息列表</li>  
                    <li id="li1" data-role="fieldcontain">信息1</li>  
                    <li id="li2" data-role="fieldcontain">信息2</li>  
                    <li id="li3" data-role="fieldcontain">信息3</li>  
                    <li id="li4" data-role="fieldcontain">信息4</li>  
                    <li id="li5" data-role="fieldcontain">信息5</li>  
                    <li id="li6" data-role="fieldcontain">信息6</li>  
                    <li id="li7" data-role="fieldcontain">信息7</li>  
                    <li id="li8" data-role="fieldcontain">信息8</li>  
                    <li id="li9" data-role="fieldcontain">信息9</li>  
                    <li id="li10" data-role="fieldcontain">信息10</li>  
                </ul>  
            </div>  
        </body>  
    </html>

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索测试
, 浏览器
, 事件
mobile
jq实现左右滑动页面、jq怎么实现滑动轮播、jq实现滑动圆旋转、jq 实现左右滑动效果、jq转原生,以便于您获取更多的相关知识。

时间: 2024-09-26 09:43:36

原生js及jq在移动网站上滑动实现实例的相关文章

原生js仿jq判断当前浏览器是否为ie,精确到ie6~8_javascript技巧

熟悉jq的朋友可能会偶尔用到判定当前浏览器是否为ie,甚至是具体到ie哪个版本.比如说判定当前浏览器是ie7 ,写法如下: if($.browser.msie && $.browser.version==7){ //ie7下执行该区域代码 } 原生js,仿jq写法,具体实现代码: <script> var browser = (function(){ var isIE6 = /msie 6/i.test(navigator.userAgent); var isIE7 = /ms

原生js实现数字字母混合验证码的简单实例_javascript技巧

本文实例讲述了原生js实现数字字母混合验证码的全部代码,重点是注释很详细,便于大家理解,特分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <title></title> <style type="text/css"> body, div { margin:

原生JS获取元素集合的子元素宽度实例_javascript技巧

有些时候,在一个网页的ul li中,存在左右两个部分的内容,但是右边元素内容又是不固定,左边元素相对应的不能用固定宽度,所有需要我们动态的获取右边元素宽度,来赋值给左边元素的marginRight值. HTML结构: <ul class="itemCon"> <li class="item"> <div class="leftMess"> <div class="leftCon">

原生Js实现简易烟花爆炸效果的方法

 这篇文章主要介绍了原生Js实现简易烟花爆炸效果的方法,实例分析了javascript实现烟花爆炸效果的原理与具体实现方法,具有一定参考借鉴价值,需要的朋友可以参考下     本文实例讲述了原生Js实现简易烟花爆炸效果的方法.分享给大家供大家参考.具体分析如下: 实现原理: 在一定范围内,随机生成一些div,形成烟花效果 代码如下: <!doctype html> <html> <head> <meta charset="utf-8">

用原生js做个简单的滑动效果的回到顶部_javascript技巧

很多网页在下方都会放置一个"返回顶部"按钮,尤其是页面底部没有导航的网页,这样可以帮助访客重新找到导航或者重温一遍广告(想得真美).随着近几年来 JavaScript 的应用日渐广泛,滑动效果无处不在,于是我也跟跟风,将返回顶部功能做成了滑动效果.后来为了更贴合物理特征, 改造做成了减速的滑动效果. 首先说一下原理吧,我们会获取滚动条到页面顶部的距离,然后上移一定的距离:再获取滚动条到页面顶部的距离,上移一定的距离(比上一次小一点);以此类推 ... <script type=&

原生JS版和JQ版--点击展开/关闭效果

原生js版和jq版--点击展开/关闭效果 可扩展的简易点击展开/关闭效果,分别用原生网页特效和jquery实现.使用方法及相关解释,请参见源码. 另,授人以鱼,不如授人以渔.我写的只是一个原型,提供一个思路一种方法.注释中我也注明了,如果你想要酷炫的效果,你可以根据自己的实际需求扩展. jquery $(function(){     var $title = $('div.jqdemo');//找到要显示/隐藏的元素     //$title.hide();   //如果你想默认是隐藏状态,可

原生js实现移动开发轮播图、相册滑动特效_javascript技巧

使用方法: 分别引用css文件和js文件 如: <link rel="stylesheet" type="text/css" href="css/photoSlider.min.css" /> <script src="js/photoSlider.min.js" type="text/javascript" charset="utf-8"></script

原生js和jquery实现图片轮播淡入淡出效果

  原生js和jquery实现图片轮播淡入淡出效果          本文给大家分享的是使用原生的js和jQuery2种方法,分别实现图片轮播的淡入淡出效果的代码,非常实用,也方便小伙伴们对比分析,希望对大家学习js和jq能够有所帮助. 图片轮播有很多种方式,这里采用其中的 淡入淡出形式 js原生和jQuery都可以实现,jquery因为封装了很多用法,所以用起来就简单许多,转换成js使用,其实也就是用js原生模拟出这些用法. 但不管怎样,构造一个最基本的表现层是必须的 简单的图片轮播一般由几个

原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)_javascript技巧

日常项目中, 对于列表类文章或数据, 大概都会用到checkbox的全选或全不选的功能, 以前的项目中也写过checkbox的选择js, 但都没有整理过. 正好前几天一个兄弟遇到了这个问题, 索性, 我花了点时间, 用原生JS与jQuery分别写了一个版本, 考虑到使用时灵活性问题, 未封装, 需要的童鞋使用时自行改下相关参数. 功能介绍点此查看DEMO演示 1. 全选/全不选 选框一体实现, 即列表中选框的状态与全选/全不选框前的选框状态一致; 2. 自动更改 全选/全不选 选框的状态, 即列