zoukankan      html  css  js  c++  java
  • 【css】用css巧妙实现移动端横向滑动展示功能

    前言:记得以前处理移动端横向滑动展示都是去用js去解决的,要用js进行蛮多处理,要算li的宽度,然后还要用js设置ul盒子的宽度,又要设置最大滑动距离,最小滑动距离等等.......但是现在发现用css就能很好的解决这功能

    一、直接上代码。

    1.  
      <!DOCTYPE html>
    2.  
      <html xmlns="http://www.w3.org/1999/xhtml">
    3.  
      <head>
    4.  
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5.  
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
    6.  
      <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
    7.  
      <title>test</title>
    8.  
      <style>
    9.  
      body,ul { margin:0; padding:0;}
    10.  
      .concent { margin:50px auto; 100%; max-750px; min-320px; }
    11.  
      .box { white-space:nowrap; overflow-x:auto; } /*注释1*/
    12.  
      .box::-webkit-scrollbar { 0; height:0; display: none; } /*注释2*/
    13.  
      li { list-style:none; display:inline-block; 100px; line-height:30px; margin-right:10px;
    14.  
      background:#ccc; text-align:center; } /*注释3*/
    15.  
      li:last-child { margin:0; }
    16.  
      </style>
    17.  
      </head>
    18.  
      <body>
    19.  
      <div class="concent">
    20.  
      <ul class="box"> <!-- /*注释4*/ -->
    21.  
      <li>简简单单</li><li>
    22.  
      简简单单</li><li>
    23.  
      简简单单</li><li>
    24.  
      简简单单</li><li>
    25.  
      简简单单</li><li>
    26.  
      简简单单</li>
    27.  
      </ul>
    28.  
      </div>
    29.  
      <script>
    30.  
      var u = navigator.userAgent;
    31.  
      var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
    32.  
      var isUc = u.indexOf('UCBrowser') > -1; //uc浏览器
    33.  
      //var isiOS = !!u.match(/(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
    34.  
      if(isAndroid&&isUc){ /*注释5*/
    35.  
      $('.box').on('touchstart',function(){
    36.  
      $(document).on('touchmove',function(e){
    37.  
      e.preventDefault();
    38.  
      });
    39.  
      $(document).on('touchend',function(){
    40.  
      $(document).unbind();
    41.  
      });
    42.  
      });
    43.  
      }
    44.  
      </script>
    45.  
      </body>
    46.  
      </html>

    运行代码,发现就可以实现左右滑动了。

    二、注释解析与注意事项。

    注释①,注释③:改变li标签为行内块元素(inline-block),给ul添加一个white-space:nowrap; 不让他自动换行。再添加overflow-x:auto;让他超出部分滚动显示。

    注释④ : 是为了解决行内块元素之间的默认间隙问题。(关于行内块间隙问题可以查看【css】行内元素、行内块元素的默认间隙问题)。

    注释②: ::-webkit-scrollbar { 0; height:0; display: none; } 是为了解决安卓浏览器的滚动条问题,在iphone浏览器上的常规浏览器上不会出现横向的滚动条,但是在安卓设备上的chrome,火狐浏览器等一些浏览器会出现滚动条,安卓设备上高版本的uc浏览器,qq自带浏览器,微信自带浏览器不会出现滚动条。(该方法无法解决火狐浏览器出现的滚动条,网上查找了蛮多资料,都建议js去解决这问题)。

    注释⑤:是为解决安卓设备上的uc浏览器一个恶心的功能,就是安卓设备上的uc浏览器如果打开好几个窗口页面。向左向右滑的时候会跳转到其他页面,这时就需要取消默认事件。

    三、(补充)通过scrollLeft,点击li标签进行位置滑动

    1.  
      <!DOCTYPE html>
    2.  
      <html xmlns="http://www.w3.org/1999/xhtml">
    3.  
      <head>
    4.  
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5.  
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
    6.  
      <script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
    7.  
      <title>test</title>
    8.  
      <style>
    9.  
      body,ul { margin:0; padding:0;}
    10.  
      .concent { margin:50px auto; 100%; max-750px; min-320px; position:relative; }
    11.  
      .box { white-space:nowrap; overflow-x:auto; position:relative; }
    12.  
      .box::-webkit-scrollbar { 0; height:0; display: none; }
    13.  
      li { list-style:none; display:inline-block; line-height:30px; margin-right:20px;
    14.  
      background:#ccc; text-align:center; }
    15.  
      </style>
    16.  
      </head>
    17.  
      <body>
    18.  
      <div class="concent">
    19.  
      <ul class="box">
    20.  
      <li>11111111</li><li>
    21.  
      22222222</li><li>
    22.  
      33333333</li><li>
    23.  
      44444444</li><li>
    24.  
      55555555</li><li>
    25.  
      66666666</li><li>
    26.  
      77777777</li><li>
    27.  
      88888888</li><li>
    28.  
      99999999</li>
    29.  
      </ul>
    30.  
      </div>
    31.  
      <script>
    32.  
      var oBox = $('.box');
    33.  
      var oBoxWidth = $('.box').width();
    34.  
       
    35.  
      oBox.find('li').on('click',function(){
    36.  
      var thisWidth = $(this).width();
    37.  
      var moveLeft = this.offsetLeft;
    38.  
      if(oBoxWidth<moveLeft+thisWidth){
    39.  
      oBox.animate({scrollLeft:moveLeft});
    40.  
      }else{
    41.  
      oBox.animate({scrollLeft:0});
    42.  
      }
    43.  
      });
    44.  
      </script>
    45.  
      </body>
    46.  
      </html>

    运行代码,就可以看到,我们点击哪个li标签,该li标签就会滑到前面的位置,当我们点击最后几个li标签,也不会说滑动位置过大,导致后面空白,如果我们用js解决的话,也还要去限制他的最大滑动距离,而通过css滚动,不需要担心这问题。

  • 相关阅读:
    系统程序员成长计划并发(二)(下)
    Web开发必知的八种隔离级别
    国产Android视频,Broncho A1
    Android中的BatteryService及相关组件
    Struts2输出XML格式的Result
    系统程序员成长计划并发(三)(上)
    入选”第一期中国最受欢迎50大技术博客”
    Broncho团队招聘应届毕业生(包括大四学生) 2名
    系统程序员成长计划并发(三)(下)
    WordPress MailUp插件‘Ajax’函数安全绕过漏洞
  • 原文地址:https://www.cnblogs.com/lsongyang/p/9433768.html
Copyright © 2011-2022 走看看