zoukankan      html  css  js  c++  java
  • swipe.js 2.0 轻量级框架实现mobile web 左右滑动

    属性总结笔记如下:

    <style>
    .swipe {
        overflow: hidden;   //隐藏溢出 清楚浮动
        visibility: hidden; //规定元素不可见 (可以设置,当事件触发后,元素可见)
        position: relative; //表示相对于浏览器的定位,应用中是相当于前面的容器来定位的
    } 
    </style>
    <script type="html/javascript">
      $("#bannerControl li:first").addClass("active"); //向第一个li元素添加一个类active;之后可以用".active"来调用这个active类(jQuery中的addClass方法)
      $("#bannerList li").css("width",$(window).width()+"px"); //设置li元素的一个或多个样式属性。以<name,value>对形式 ($(selector).css(name,value))$(window).width()浏览器可视宽度
      
      $(".banner").on("swipeleft",function(){ //在元素banner上,绑定swipeleft事件,事件被触发时执行函数function{}

                  //见后面的myInner = setInterval(function(){})方法,关闭自动轮播效果

                            clearInterval(myInner);

                  //取到当前图片的index索引值
                            var num = $("#bannerControl li.active").index(); //jQuery中.index()中搜索匹配元素,并返回元素的索引值;返回class=“active“的<li>元素在其同辈元素集合(<li>标签集合)中的索引值。
                            
                  //根据当前索引,判断向左滑动时候的next index
                  var count = num==(countPicNum-1)?0:num+1;

                  //jQuery中” :eq()选择器 “(下标从0开始); 定义到next index的<li>标签,添加class=”active“, jQuery中的" .siblings() ",查找标签<li>集合中class=”active“的标签,并将找到的标签中的类class=”active“移除
                            $("#bannerControl li:eq("+count+")").addClass("active").siblings($("#bannerControl li:eq("+count+")")).removeClass("active");
                            
                  //jQuery中”translate()“实现过渡效果translate(Xpx,Ypx);X方向是右,Y方向是下。”+“是连接符,”-($(window).width()*count)px“表示向左移动指定像素个单位,translateZ定义了3D转换(CSS3中属性)
                  $("#bannerList").css("transform","translate("+-($(window).width()*count)+"px, 0px) translateZ(0px)");

                  //函数定义了自动轮播效果,每隔3000毫秒轮播下一张图片
                            myInner = setInterval(function(){
                                var num = $("#bannerControl li.active").index();
                                var count = num==(countPicNum-1)?0:num+1;
                                $("#bannerControl li:eq("+count+")").addClass("active").siblings($("#bannerControl li:eq("+count+")")).removeClass("active");
                                $("#bannerList").css("transform","translate("+-($(window).width()*count)+"px, 0px) translateZ(0px)");
                            },3000);
                        });   

       

        success : function(data) {

        //我们试着添加alert(data["data"]);会返回[object, Object],[object, Object],[object, Object]

             //responseCode表示正常的登录状态
                    if(0000==data["responseCode"]){

                //这个for循环, 添加所有的<li>标签
                        for(var i=0; i<data["data"].length; i++){

                  //jQuery中的.append()方法, 在标签<ul id="bannerList"></ul>中添加<li></li>标签。每个标签中定义了图片属性。
                            $("#bannerList").append('<li><a href="'+data["data"][i]["linkUrl"]+'" target="_self"><img src="'+data["data"][i]["picUrl"]+'" alt="'+data["data"][i]["picName"]+'"></a></li>');
                            $("#bannerControl").append('<li></li>');
                        }

                //定义了图片的总张数 变量countPicNum来表示
                        var countPicNum = data["data"].length;

                
                        $(".control").css({"width":(countPicNum*15)+"px"});
                        $("#bannerControl").css("margin-left",-countPicNum*15*0.5+"px");
                        $("#bannerControl li:first").addClass("active");
                        $("#bannerList li").css("width",$(window).width()+"px");
                        $("#bannerList").css("width",($(window).width()*countPicNum)+"px");

                //定义了默认的自动轮播效果
                        $("#bannerControl li").on("click",function(){
                            clearInterval(myInner);
                            var num = $(this).index();
                            $(this).addClass("active").siblings(this).removeClass("active");
                            $("#bannerList").css("transform","translate("+-($(window).width()*num)+"px, 0px) translateZ(0px)");
                            myInner = setInterval(function(){
                                var num = $("#bannerControl li.active").index();
                                var count = num==(countPicNum-1)?0:num+1;
                                $("#bannerControl li:eq("+count+")").addClass("active").siblings($("#bannerControl li:eq("+count+")")).removeClass("active");
                                $("#bannerList").css("transform","translate("+-($(window).width()*count)+"px, 0px) translateZ(0px)");
                            },3000);
                        });
                        var myInner = setInterval(function(){
                            var num = $("#bannerControl li.active").index();
                            var count = num==(countPicNum-1)?0:num+1;
                            $("#bannerControl li:eq("+count+")").addClass("active").siblings($("#bannerControl li:eq("+count+")")).removeClass("active");
                            $("#bannerList").css("transform","translate("+-($(window).width()*count)+"px, 0px) translateZ(0px)");
                            //$("#bannerList").animate({"margin-left":-($(window).width()*count)+"px"});
                        },3000);                            
    </script>

     那么我们找到了完美的轻量级替代方案,swipe.js 2.0.具体如下所示:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Mobile web轮播Demo展示</title>
    </head>

    //引入css样式 <link rel="stylesheet" type="text/css" href="css/swipe.css"> <body> <div class="addWrap"> <div class="swipe" id="mySwipe"> <div class="swipe-wrap">

        //<a>标签的href属性用于指定超链接目标的URL,href属性的值可以是任何有效的相对或绝对的URL,包括片段标识符和JavaScript代码段。
        //javascript:是表示在触发<a>默认动作时,执行一段JavaScript代码,而 javascript:; 表示什么都不执行,这样点击<a>时就没有任何反应。当页面内容很多,有滚动条时,页面不会乱跳,用户体验更好。
    <div><a href="javascript:;"><img class="img-responsive" src="images/1.jpg"/></a></div> <div><a href="javascript:;"><img class="img-responsive" src="images/2.jpg"/></a></div> <div><a href="javascript:;"><img class="img-responsive" src="images/3.jpg"/></a></div> </div> </div>

     // <ul id="position"> <li class="cur"></li> <li class=""></li> <li class=""></li> </ul> </div> <script src="js/swipe.js"></script> <script type="text/javascript">

    //上文中<ul id="position">DOM中Element对象,表示HTML元素。
    var bullets = document.getElementById('position').getElementsByTagName('li'); var banner = Swipe(document.getElementById('mySwipe'), {
      
       //开始自动幻灯片(以毫秒为单位 幻灯片之间的时间) auto:
    2000,

       //continuous Boolean(default:true)创建一个无线的循环(当滑动到所有动画结束时是否循环滑动) continuous:
    true,

       //disableScroll Boolean(default:false) 当滚动滚动条时 是否停止幻灯片滚动 disableScroll:
    false,

       //幻灯片运行中的回调函数 callback:
    function(pos) { var i = bullets.length; while (i--) { bullets[i].className = ' '; } bullets[pos].className = 'cur'; } }); </script> </body> </html>

     关于上述代码中的两个两个引用:一个关于swipe.js(更改了其中的stop函数,保证触摸之后,继续执行自动轮播功能),另外一个是swipe.css(由于自己的mobile web页面与源码有冲突,故而分析swipe.css如下)

    //标签选择器,让总的<body>标签的外边距和内边距为0
    body{ margin:0; padding:0}

    //针对class=“addWrap”的标签,position:relative表示相对于前面的容器定位的。background:#fff表示背景是白色; .addWrap{ position:relative; 100%;background:#fff;margin:0; padding:0;}

    //对于class=“addWrap”子节点中class=“swipe”的标签,overflow: hidden;规定了当内容溢出元素框时会发生的事情(hidden表示溢出内容会被修剪,且多余内容是不可见的;)
    //visibility: hidden;该属性规定了元素是否可见。即规定了class=“swipe”的标签是不可见的;同样的position:relative;表示相对溢出
    .addWrap .swipe{overflow: hidden;visibility: hidden;position:relative;}
    .addWrap .swipe-wrap{overflow:hidden;position:relative;}

    //其中 .swip-wrap > div 表示swipe-wrap元素的所有子div元素。如果不加 > 这个符号的话,会包括子子孙孙的所有子节点,子节点的子节点。
    //float:left是一个关键属性,它表示向左浮动。比如多个div在一个页面上,默认情况是:一行一个div,但是只要在div的css中使用float:left,
    //可以使一行有多个div,这样可以把网页划分成很多块,但是使用该属性会影响后面的元素,所有如果后面的div不想再被影响,可以使用clear:both;
    //可以理解为清除float:left和float:right的影响,返回到默认状态。像<ul><li></li></ul>也可以这么使用,做导航菜单基本上有这个元素,使用float:left使其横向显示。
    .addWrap .swipe-wrap > div {float: left; 100%;position:relative;}
    //position:absolute;表示绝对定位,把它固定到你想要固定到的位置。当使用绝对定位的时候,后面跟的是定位的具体位置参数。如bottom:0.它表示把图像的底边缘设置在其包含元素底边缘之上5像素高的位置。
    //表示位置属性的单位都是像素px。background:#000;表示颜色为黑色。
    //opacity: 0.4; 用于设置标签元素的不透明级别。0.0表示完全透明;1.0表示完全不透明。
    //同样的,CSS3中
    100%;表示的就是自适应宽度。100%是直接基于父级DIV的宽度(宽度要指定)。
    //filter: alpha(opacity=50);alpha是用来设置透明度的,其中opacity表示透明度数。0表示完全透明,100表示完全不透明。
    //CSS3中的属性text-align:right;表示元素中的文本的水平对齐方式。 #position{ position:absolute; bottom:0; right:0; padding-right:8px; margin:0; background:#000; opacity: 0.4; 100%; filter: alpha(opacity=50);text-align:right;}

    //display:inline-block;将对象呈递为内联对象。-webkit-border-radius:5px;对于webkit内核的浏览器设置<li>元素四个角的5像素的圆角效果。用于设置一个小长方形的圆角效果。
    //CSS3中border-radius:5px;添加圆角边框,设置了四个角的边框是5px像素。
    #position li{10px;height:10px;margin:0 2px;display:inline-block;-webkit-border-radius:5px;border-radius:5px;background-color:#AFAFAF;} #position li.cur{background-color:#FF0000;}

    //这个class=img-responsive属性中,表示将来img标签,也就是图片标签变成一个区块儿。让图片元素的显示为块级元素,这样就可以像块一样的去操作图片了。
    //max- 100%; 最大宽度属性,用来定义宽度显示的最大值
    .img-responsive { display: block; max- 100%; height: auto;}

    接下来需要熟练使用Chrome的F12调试器来来按照参考demo的swipe.js对原本页面进行调试,达到一样的页面布局和样式效果。下面是自己自学的总结笔记如下:

      修改bug的模式是什么?一个一个的修改,然后再到浏览器去一次又一次的刷新?但随着经验的增长,自己也感觉这样修改的模式是烦人的、效率低下的,那有没有一种方式是可以快速修改,所见所得,回答是有的

      Chrome

      总结如下:

    1,overflow:hidden与visibility:hidden属性比较:overflow:hidden是隐藏溢出,清楚浮动;visibility:hidden是属性不可见。

  • 相关阅读:
    dubbo springcloud区别
    rpc
    centos7 安装docker
    vibox安装
    知识点
    spring cloud
    微服务设计原则
    工具类
    xss--知识点
    java基础--注解
  • 原文地址:https://www.cnblogs.com/RunForLove/p/4591967.html
Copyright © 2011-2022 走看看