zoukankan      html  css  js  c++  java
  • jquery 触屏滑动+定时滚动

    <!doctype html>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
    <meta name="applicable-device" content="mobile" />
    <meta content="yes" name="apple-mobile-web-app-capable"/>
    <meta name="apple-mobile-web-app-status-bar-style" content="black" />
    <meta content="telephone=no" name="format-detection"/>
    <title>无标题文档</title>
    </head>
    <style>
    *{ font-size:14px; padding:0; margin:0;}
    .tab{ margin:10px;}
    .tit{ height:30px; 100%; border:1px solid #ccc; line-height:30px;}
    .tit span{ display:inline-block; height:30px; line-height:30px; 24%; border-right:1px solid #ccc; text-align:center}
    .tit .cur{ color:#fff; background-color:#ccc;}
    ul{overflow:hidden;zoom:1; 300px; float:left}
    ul li{ height:30px; line-height:30px; white-space:nowrap; overflow:hidden}
    .tab-wrap{ position:relative; height:150px; overflow:hidden;zoom:1;}.tab-main{ position:absolute; left:0px; top:0px;}
    </style>
    <body>
    
    <div class="tab" id="tap">
        <div class="tit"><span class="cur">新闻</span><span>体育</span><span>娱乐</span><span>文化</span></div>
        <div class="tab-wrap">
            <div class="tab-main">
                <ul class="current">
                    <li>新闻新闻新闻新闻新闻新闻新闻新闻新闻</li>
                    <li>新闻新闻新闻新闻新闻新闻新闻新闻新闻</li>
                    <li>新闻新闻新闻新闻新闻新闻新闻新闻新闻</li>
                    <li>新闻新闻新闻新闻新闻新闻新闻新闻新闻</li>
                    <li>新闻新闻新闻新闻新闻新闻新闻新闻新闻</li>
                </ul>
                <ul>
                    <li>体育体育体育体育体育体育体育体育体育</li>
                    <li>体育体育体育体育体育体育体育体育体育体育体育体育</li>
                    <li>体育体育体育体育体育体育体育体育体育体育</li>
                    <li>体育体育体育体育体育体育体育体育体育体育</li>
                    <li>体育体育体育体育体育体育体育体育体育体育体育</li>
                </ul>
                <ul>
                    <li>娱乐娱乐娱乐娱乐娱乐娱乐娱乐</li>
                    <li>娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐</li>
                    <li>娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐</li>
                    <li>娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐</li>
                    <li>娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐娱乐</li>
                </ul>
                <ul>
                    <li>文化文化文化文化文化文化文化文化文化文化文化</li>
                    <li>文化文化文化文化文化文化文化文化文化文化</li>
                    <li>文化文化文化文化文化文化文化文化文化文化</li>
                    <li>文化文化文化文化文化文化文化文化文化文化文化文化</li>
                    <li>文化文化文化文化文化文化文化文化文化文化</li>
                </ul>
            </div>
        </div>
    </div>
    
    <script src="js/jquery.js"></script>
    <script>
    	
    $('ul').width($(window).width()-20);
    var oulWidth=$('ul').width();
    var oulLength=$('ul').length;
    var timer=null;
    var i=0;
    var j=0;
    $('.tab-main').width(oulWidth*oulLength);
    
    $(".tab-main").on("touchstart", function(e) {
        e.preventDefault();
    	clearInterval(timer)
        startX = e.originalEvent.changedTouches[0].pageX,
        startY = e.originalEvent.changedTouches[0].pageY;
    });
    $(".tab-main").on("touchmove", function(e) {
        e.preventDefault();
        moveEndX = e.originalEvent.changedTouches[0].pageX,
        moveEndY = e.originalEvent.changedTouches[0].pageY,
        X = moveEndX - startX,
        Y = moveEndY - startY;
    });
    
    $(".tab-main").on("touchend", function(e) {
        e.preventDefault();//阻止默认触屏滑动
        if ( Math.abs(X) > Math.abs(Y) && X > 0 ) { //向左
           if(i==0){
    		   i=oulLength-1;
    		   $('.tab-main ul').eq(i).css({'position':'relative','left':-oulWidth*oulLength+'px'});
    	   }else{
    		   i--
    	   };
    	   j--;
    	   $('.tab-main').animate({'left':-j*oulWidth});
    	   $('.tit span').eq(j).addClass('cur').siblings().removeClass('cur');
           $('.tab-main').stop().animate({'left':-j*oulWidth+'px'},function(){
    		   if(i==oulLength-1){
    			   $('.tab-main ul').eq(oulLength-1).css({'position':'static'});
    			   $('.tab-main').css('left',-oulWidth*(oulLength-1));
    			   j=oulLength-1;
    		   };
    	   });
        }else if ( Math.abs(X) > Math.abs(Y) && X < 0 ) {//向右
           rightAuto()
        }else if ( Math.abs(Y) > Math.abs(X) && Y > 0) {//向下
            alert("top 2 bottom");
        }else if ( Math.abs(Y) > Math.abs(X) && Y < 0 ) {//向上
            alert("bottom 2 top");
        }else{//点击
            alert("just touch");
        };
    	timer=setInterval(rightAuto,5000);
    });
    	//右滚动函数
        function rightAuto(){
    		 if(i==oulLength-1){
    		  i=0;
    		  $('.tab-main ul').eq(0).css({'position':'relative','left':oulWidth*oulLength+'px'});
    	   }else{
    		  i++
    	   };
    	   j++
    	   $('.tab-main').animate({'left':-j*oulWidth});
    	   $('.tit span').eq(i).addClass('cur').siblings().removeClass('cur');
           $('.tab-main').stop().animate({'left':-j*oulWidth+'px'},function(){
    		   if(i==0){
    			   $('.tab-main ul').eq(0).css({'position':'static'});
    			   $('.tab-main').css('left',0);
    			   j=0;
    		   };
    	   })
    	};
    	//定时轮播
    	timer=setInterval(rightAuto,5000);
    
    </script>
    </body>
    </html>
    

     

    步骤解释:

     1.主要运用touchstart,touchmove,touchend三个事件;当touched结束时根据滑动的距离执行判断

     Math.abs(X) > Math.abs(Y) 是向左右,向右,上,下,当然写在次出还有些bug,因为滑动屏幕的时候不会很直,会斜上或者斜下,因此加上“&& X < 0 ”判断更准确一些;

         2.有了判断结果,然后根据相应的结果写出滑动的效果,此处我觉得和pc写法差别不大;

        3. 然后就是定时滚动,此处和pc也不是很大区别,最后一点就是当进行touchstart的时候,clearInterval(timer)清除定时器,当touchend的时候,再进行滚动

        ok,在此基本完成

  • 相关阅读:
    IO
    mouseover,mouseout和mouseenter,mouseleave
    【译】addEventListener 第二个参数
    Git 常用命令
    我对Backbone中url属性的理解
    小失误引起大失败
    收集各大网站的登录页面
    随笔2
    随笔1
    创建数据库
  • 原文地址:https://www.cnblogs.com/cainiaoz/p/4626516.html
Copyright © 2011-2022 走看看