兼容移动端的响应式瀑布流

<!doctype html>
<html lang="zh">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>兼容移动端的响应式瀑布流-Amals技术博客</title>
        <script type="text/javascript" src="http://www.amals.org/zb_system/script/common.js"></script>
        <style type="text/css">
            .grid {position: relative;margin: 0 auto;width: 98%;}
            .grid-item{position: absolute;top: 0;left: 0;width: 180px;}
            .grid-item img{width: 180px;border:1px solid #333;border-radius:3px;}
            @media (max-width: 600px) {
            .grid-item {width: 120px;}
            .grid-item img {width: 120px;}
            }
        </style>
        <!--[if IE]>
                <script src="http://libs.useso.com/js/html5shiv/3.7/html5shiv.min.js"></script>
        <![endif]-->
    </head>
    <body>
         <div class="grid">
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/3.jpeg" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/2.jpeg" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/1.jpeg" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java10.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java9.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java8.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java7.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java6.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java5.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java4.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java3.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java2.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/java1.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606221466565798842288.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606221466528183703067.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606221466525571912525.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606221466525171290951.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606211466523548572787.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606211466523779487012.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606211466523835767888.png" /></div>
           <div class="grid-item"><img src="http://www.amals.org/zb_users/upload/2016/06/201606221466525083482513.png" /></div>
        </div>
        <script>
            (function(exports){
             function minigrid(containerSelector, itemSelector, gutter, animate, done) {
             var forEach = Array.prototype.forEach;
             var containerEle = document.querySelector(containerSelector);
             var itemsNodeList = document.querySelectorAll(itemSelector);
             gutter = gutter || 6;
             containerEle.style.width = '';
             var containerWidth = containerEle.getBoundingClientRect().width;
             var firstChildWidth = itemsNodeList[0].getBoundingClientRect().width + gutter;
             var cols = Math.max(Math.floor((containerWidth - gutter) / firstChildWidth), 1);
             var count = 0;
             containerWidth = (firstChildWidth * cols + gutter) + 'px';
             containerEle.style.width = containerWidth;

             for (var itemsGutter = [], itemsPosX = [], g = 0; g < cols; g++) {
             itemsPosX.push(g * firstChildWidth + gutter);
             itemsGutter.push(gutter);
             }
             forEach.call(itemsNodeList, function(item){
                          var itemIndex = itemsGutter.slice(0).sort(function (a, b) {
                                                                    return a - b;
                                                                    }).shift();
                          itemIndex = itemsGutter.indexOf(itemIndex);
                          var posX = itemsPosX[itemIndex];
                          var posY = itemsGutter[itemIndex];
                          var transformProps = [
                                                'webkitTransform',
                                                'MozTransform',
                                                'msTransform',
                                                'OTransform',
                                                'transform'
                                                ];
                          if (!animate) {
                          forEach.call(transformProps, function(transform){
                                       item.style[transform] = 'translate(' + posX + 'px,' + posY + 'px)';
                                       });  
                          }
                          itemsGutter[itemIndex] += item.getBoundingClientRect().height + gutter;
                          count = count + 1;
                          if (animate) {
                          return animate(item, posX, posY, count);
                          }
                          });
             var containerHeight = itemsGutter.slice(0).sort(function (a, b) {
                                                             return a - b;
                                                             }).pop();
             containerEle.style.height = containerHeight + 'px';

             if (typeof done === 'function'){
             done();
             }
             }
             if (typeof define === 'function' && define.amd) {
             define(function() { return minigrid; });
             } else if (typeof module !== 'undefined' && module.exports) {
             module.exports = minigrid;
             } else {
             exports.minigrid = minigrid;
             }
             })(this);
        </script>
        <script>
        (function() {
            minigrid('.grid', '.grid-item', 6, null,
                    function() {
                        var d = document.querySelector('.grid');
                        d.style.opacity = 1;
                    }
            );
            window.addEventListener('resize', function() {
                minigrid('.grid', '.grid-item');
            });
        })();
        </script>
    </body>
</html>

版权所属: Amals技术博客
原文地址: http://www.amals.org/?id=73

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值