HTML5实现滑动切换


HTML5中新添加了很多事件,但是由于他们的兼容问题不是很理想,应用实战性不是太强,所以在这里基本省略,咱们只分享应用广泛兼容不错的事件,日后随着兼容情况提升以后再陆续添加分享。今天为大家介绍的事件主要是触摸事件:touchstart、touchmove和touchend。 
  一开始触摸事件touchstart、touchmove和touchend是iOs版Safari浏览器为了向开发人员传达一些信息新添加的事件。因为iOs设备既没有鼠标也没有键盘,所以在为移动Safari浏览器开发交互性网页的时候,PC端的鼠标和键盘事件是不够用的。 
  在iPhone 3Gs发布的时候,其自带的移动Safari浏览器就提供了一些与触摸(touch)操作相关的新事件。随后,Android上的浏览器也实现了相同的事件。触摸事件(touch)会在用户手指放在屏幕上面的时候、在屏幕上滑动的时候或者是从屏幕上移开的时候出发。下面具体说明: 

  touchstart事件:当手指触摸屏幕时候触发,即使已经有一个手指放在屏幕上也会触发。 
  touchmove事件:当手指在屏幕上滑动的时候连续地触发。在这个事件发生期间,调用preventDefault()事件可以阻止滚动。 
  touchend事件:当手指从屏幕上离开的时候触发。 
  touchcancel事件:当系统停止跟踪触摸的时候触发。关于这个事件的确切出发时间,文档中并没有具体说明,咱们只能去猜测了。 

  上面的这些事件都会冒泡,也都可以取消。虽然这些触摸事件没有在DOM规范中定义,但是它们却是以兼容DOM的方式实现的。所以,每个触摸事件的event对象都提供了在鼠标实践中常见的属性:bubbles(起泡事件的类型)、cancelable(是否用 preventDefault() 方法可以取消与事件关联的默认动作)、clientX(返回当事件被触发时,鼠标指针的水平坐标)、clientY(返回当事件触发时,鼠标指针的垂直坐标)、screenX(当某个事件被触发时,鼠标指针的水平坐标)和screenY(返回当某个事件被触发时,鼠标指针的垂直坐标)。除了常见的DOM属性,触摸事件还包含下面三个用于跟踪触摸的属性。 

  touches:表示当前跟踪的触摸操作的touch对象的数组。 
  targetTouches:特定于事件目标的Touch对象的数组。 
  changeTouches:表示自上次触摸以来发生了什么改变的Touch对象的数组。 

  每个Touch对象包含的属性如下。 

  clientX:触摸目标在视口中的x坐标。 
  clientY:触摸目标在视口中的y坐标。 
  identifier:标识触摸的唯一ID。 
  pageX:触摸目标在页面中的x坐标。 
  pageY:触摸目标在页面中的y坐标。 
  screenX:触摸目标在屏幕中的x坐标。 
  screenY:触摸目标在屏幕中的y坐标。 
  target:触目的DOM节点目标。

实现一个左右切换页面:

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4     <title></title>
  5     <script src="/public/js/jquery-1.9.1.min.js" type="text/javascript"></script>
  6    <style type="text/css">
  7      html
  8         {
  9          height:100%;
 10          margin:0;
 11         }
 12         body
 13         {
 14             height:100%;
 15             margin:0; 
 16         }
 17       .circle{
 18        width: 20px;
 19     height: 20px;
 20    
 21     border-radius: 10px;
 22     -moz-border-radius: 10px;
 23     -webkit-border-radius: 10px;
 24    
 25     border-color:#000000;
 26     border-style: solid;
 27     border-width: 1px;
 28    float: left;
 29    margin-left: 10px;
 30 
 31     }
 32 
 33 
 34     .circleConllec{ width: 130px;  height: 20px; margin:auto; position: absolute;  top: 0; left: 0; bottom: 0; right: 0;  z-index: 10;  }
 35 
 36     .content{
 37       width: 100%;
 38       height: 100%;
 39     
 40       position: absolute;
 41       z-index: -1;
 42     }
 43     
 44    
 45    </style>
 46 </head>
 47 <body>
 48 
 49 <div class="content" style="background-color: red; z-index: 1;" id="content-red">
 50   
 51 </div>
 52 
 53 <div class="content" style="background-color: yellow;" id="content-yellow">  
 54 </div>  
 55 <div class="content" style="background-color: black;"  id="content-black">
 56 </div>  
 57 
 58 <div class="content" style="background-color: blue;" id="content-blue">
 59     
 60 </div>  
 61 
 62 <div class="circleConllec">
 63   <div class="circle" id="circle-red" style="background-color: #CD1076;" ></div>
 64   <div class="circle" id="circle-yellow"></div>
 65   <div class="circle" id="circle-black"></div>
 66   <div class="circle" id="circle-blue"> </div>
 67 </div>
 68     
 69 
 70 </body>
 71 </html>
 72 <script type="text/javascript">
 73 
 74 var startTouch=null;
 75 var endTouch=null;
 76 var currentContent="content-red";
 77 var currentCircle="circle-red";
 78 
 79 var Content={
 80  Next:function(){
 81   if(currentContent != "content-blue"){
 82     $('#'+currentContent).css("z-index",-1);
 83     $('#'+currentContent).next().css("z-index",1);
 84     currentContent = $('#'+currentContent).next().attr("id");
 85     $('#'+currentCircle).css("background-color","#FFFFFF");
 86     $('#'+currentCircle).next().css("background-color","#CD1076");
 87     currentCircle =  $('#'+currentCircle).next().attr("id");
 88   }else{//结束 
 89   }
 90  },
 91   Pre:function(){
 92     if(currentContent != "content-red"){
 93        $('#'+currentContent).css("z-index",-1);
 94       $('#'+currentContent).prev().css("z-index",1);
 95       currentContent = $('#'+currentContent).prev().attr("id");
 96       $('#'+currentCircle).css("background-color","#FFFFFF");
 97       $('#'+currentCircle).prev().css("background-color","#CD1076");
 98       currentCircle =  $('#'+currentCircle).prev().attr("id");
 99     }else{ //开始 
100     }
101   }
102 };
103 
104 
105   $('.content').bind("touchstart",function(event){
106     // var touch =event.originalEvent.touches[0];
107     // console.log(event.originalEvent.touches[0]);
108    startTouch =event.originalEvent.touches[0];
109   });
110  
111   $('.content').bind("touchend",function(event){
112     endTouch=event.originalEvent.changedTouches[0];
113     console.log("开始 pageX:"+startTouch.pageX +" pageY:"+startTouch.pageY);
114      console.log("结束 pageX:"+endTouch.pageX +" pageY:"+endTouch.pageY);
115     var pageX= startTouch.pageX - endTouch.pageX;
116     var pageY= startTouch.pageY - endTouch.pageY;
117    // console.log(event.originalEvent.changedTouches[0]);
118    console.log("pageX:"+pageX+" pageY:"+pageY);
119    if(startTouch.pageX >endTouch.pageX){//左滑动
120     console.log("左滑动");
121     if(currentContent != "content-red"){
122       Content.Pre();
123     }
124     }else{
125      console.log("右滑动");
126      if (currentContent != "content-blue") {
127       Content.Next();
128      }
129    }
130   });
131 
132    $('.content').bind("touchmove",function(event){
133     var touch =event.originalEvent.changedTouches[0];
134     //console.log(event.originalEvent.changedTouches[0]);
135     var moveX = touch.pageX- startTouch.pageX;
136     console.log("移动的X距离:"+moveX);
137     var pageWidth = $("body").width()/2;
138 
139    });
140 </script>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM