手机端如何用JS实现触屏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手机端如何用JS实现触屏相关的知识,希望对你有一定的参考价值。

想做一个页面,需要可以触摸滑动导航,就是导航超出的部分隐藏,手指滑动的时候,隐藏的部分出来。如何用html5或者JS实现这个效果。分不多了,请大神帮忙。

//html5 新增 touch 事件
//禁用手机默认的触屏滚动行为
document.addEventListener('touchmove', function(event) 
event.preventDefault();
, false);
//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;


 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坐标


//document.getElementById("version").innerHTML = "原:"+startY+"   "+"现:"+y;
//判断滑动方向

if (y - startY > 100) 
swipeDown();
 else if(y - startY < -100)
swipeUp();

 catch (e) 
alert('touchMoveFunc:' + e.message);



//touchend事件
function touchEndFunc(evt) 
try 
//evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等


 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);

参考技术A 手机端的触摸事件为touchstart,touchmove,touchend。如果使用第三方类库会封装更多的方法,比如,jQuery-mobile的tap,taphold等 参考技术B

在实现触屏中,必须采用js的addEventListener,接着加上touchstart,touchmove,touchend来实现触屏效果。


e.preventDefault(),假设不写这一句,在触屏的时候,页面就会滑动,所以它的作用是巨大的。

参考技术C 您可以了解一下jqm
在手机端实现触屏,加载,或者自适应都不错

在移动端如何用swiper实现导航栏效果

  我们在写移动端的时候会有滑动和点击导航后滑动到目标页面功能;而这个功能如果自己写的话会很麻烦,所以我在这推荐一下swiper这个插件。

  其实swiper中的官网中也有这种功能的实现,但是我认为是有点麻烦的。而我在网上也没找到。所以我通过查找和研究弄出了这种方法(也可能有人这么用了);

  话不多说,上代码

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <link rel="stylesheet" type="text/css" href="css/swiper.min.css"/>
        <style type="text/css">
            .swiper-container{/*把主要的框写好*/
                width:400px;
                height:400px;
                border:1px solid #aaa;
            }
            .swiper-slide{/*轮播的内容*/
                width:100%;
                height:100%;
                text-align: center;
                line-height: 400px;
            }
            .swiper-pagination{/*装有小圆点的容器,把它移动到顶部,不过top为零时容易把内容覆盖一部分,所以减去小圆点的高度*/
                border-bottom: 1px solid #aaa;
                width:100%;
                height:40px;
                display: flex;
                top:0;
            }
            .swiper-pagination-bullet-active{/*这个是被选取得当前的小圆点的样式*/
                color:#808080;
            }
            .swiper-pagination-bullet{/*这个是小圆点的样式*/
                background:transparent;/*背景色设置为需要的背景*/
                -webkit-flex-grow: 1;/*这个就不用解释了吧,就是平均分配的弹性盒*/
                text-align: center;
                line-height: 40px;
                border-radius: 0;/*把小圆点重新设置为矩形*/
                height: 40px;
                color:#000000;
            }
            .swiper-pagination-bullet:nth-child(1):before{/*在元素的内容之前插入新内容;*/
                content:"Slide 1";/*所插入的内容*/
            }
            .swiper-pagination-bullet:nth-child(2):before{
                content:"Slide 2";
            }
            .swiper-pagination-bullet:nth-child(3):before{
                content:"Slide 3";
            }
            .swiper-pagination-bullet:nth-child(4):before{
                content:"Slide 4";
            }
            .swiper-pagination-bullet:nth-child(5):before{
                content:"Slide 5";
            }
        </style>
    </head>
    <body>
        <div class="swiper-container">
            <div class="swiper-wrapper">
                <div class="swiper-slide">Slide 1</div>
                <div class="swiper-slide">Slide 2</div>
                <div class="swiper-slide">Slide 3</div>
                <div class="swiper-slide">Slide 4</div>
                <div class="swiper-slide">Slide 5</div>
            </div>
            <!-- Add Pagination -->
            <div class="swiper-pagination"></div>
        </div>
    </body>
</html>
<script src="js/swiper.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
    window.onload = function(){
        var swiper = new Swiper(".swiper-container", {
            pagination: ".swiper-pagination",//显示小圆点
            autoplay:2000,                     //轮播毫秒数
            loop:true,                         //可以重复轮播,默认方式是false
            paginationClickable: true,         //值为真时,当单击指示器时会执行过渡动画到目标slide
            speed:300,                         //slides滑动动画之间的持续时间
            autoplayDisableOninteraction:true,//autoplay不会被禁掉,用户操作之后每次都会重新启动autoplay
//            mode:‘horizontal‘,                 //slides滑动方式,水平或垂直
        });
    }
</script>

  这中方法我认为是非常简单的。希望对大家有用

<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><link rel="stylesheet" type="text/css" href="css/swiper.min.css"/><style type="text/css">.swiper-container{/*把主要的框写好*/width:400px;height:400px;border:1px solid #aaa;}.swiper-slide{/*轮播的内容*/width:100%;height:100%;text-align: center;line-height: 400px;}.swiper-pagination{/*装有小圆点的容器,把它移动到顶部,不过top为零时容易把内容覆盖一部分,所以减去小圆点的高度*/border-bottom: 1px solid #aaa;width:100%;height:40px;display: flex;top:0;}.swiper-pagination-bullet-active{/*这个是被选取得当前的小圆点的样式*/color:#808080;}.swiper-pagination-bullet{/*这个是小圆点的样式*/background:transparent;/*背景色设置为需要的背景*/-webkit-flex-grow: 1;/*这个就不用解释了吧,就是平均分配的弹性盒*/text-align: center;line-height: 40px;border-radius: 0;/*把小圆点重新设置为矩形*/height: 40px;color:#000000;}.swiper-pagination-bullet:nth-child(1):before{/*在元素的内容之前插入新内容;*/content:"Slide 1";/*所插入的内容*/}.swiper-pagination-bullet:nth-child(2):before{content:"Slide 2";}.swiper-pagination-bullet:nth-child(3):before{content:"Slide 3";}.swiper-pagination-bullet:nth-child(4):before{content:"Slide 4";}.swiper-pagination-bullet:nth-child(5):before{content:"Slide 5";}</style></head><body><div class="swiper-container">    <div class="swiper-wrapper">            <div class="swiper-slide">Slide 1</div>            <div class="swiper-slide">Slide 2</div>            <div class="swiper-slide">Slide 3</div>            <div class="swiper-slide">Slide 4</div>            <div class="swiper-slide">Slide 5</div>        </div>        <!-- Add Pagination -->        <div class="swiper-pagination"></div>    </div></body></html><script src="js/swiper.min.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript">window.onload = function(){    var swiper = new Swiper(".swiper-container", {        pagination: ".swiper-pagination",//显示小圆点        autoplay:2000, //轮播毫秒数        loop:true, //可以重复轮播,默认方式是false        paginationClickable: true, //值为真时,当单击指示器时会执行过渡动画到目标slide        speed:300, //slides滑动动画之间的持续时间        autoplayDisableOninteraction:true,//autoplay不会被禁掉,用户操作之后每次都会重新启动autoplay//        mode:‘horizontal‘, //slides滑动方式,水平或垂直    });}</script>

以上是关于手机端如何用JS实现触屏的主要内容,如果未能解决你的问题,请参考以下文章

JS移动客户端--触屏滑动事件及js手机拖拽效果

JS移动客户端--触屏滑动事件及js手机拖拽效果

JS移动客户端--触屏滑动事件及js手机拖拽效果

手机端html5触屏事件(touch事件)

如何用JS监控多种手势

JS绑定触屏滑动事件的问题