最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

avalonjs制作響應(yīng)式瀑布流特效

 更新時間:2015年05月06日 10:03:35   投稿:hebedich  
瀑布流主要應(yīng)用在圖片展示頁面上。如果有一大批圖片需要展示,原始圖片尺寸不一致,又希望每張圖片都能不剪裁,完整顯示,那么就要給圖片規(guī)定一個寬度,解放它們的高度。利用網(wǎng)頁高度不限這個特性,充分利用頁面的空間,盡可能的展示多的圖片。下面我們就來詳細(xì)探討下

  布局不是基于float,也不是基于絕對定位,看最下面的html,css就知道了。也沒有滿篇煩人的html插入,代碼很清爽

function getIndex(index) {
  if (index < 10) {
    index = "00" + index;
  } else if (index < 100) {
    index = "0" + index;
  }
  return index;
}
var $ = function(id) {
  return document.getElementById(id);
};
require([ "avalon-min" ], function(avalon) {
  var waterfall = {
      load_items : null,
      loaded_items:[],
      col_num : 0,// 列數(shù)
      waterfall_model : null,
      col_width : 200,
      loaded_num : 0,
      init_num : 0,
      loading : false,
      start:0,
      resizing:false,
      find_shortest_col : function() {
      // 找出最小高度的列
        var a = avalon($('row0')).height(), min_i = 0;
        for ( var i = 1; i < this.col_num; i++) {
          var b = avalon($('row' + i)).height();
          if (b < a) {
            min_i = i;
            a = b;
          }
        }
        return min_i;
      },
      init : function(data) {
        this.load_items = data;
        this.loaded_items=this.loaded_items.concat(data);
        this.waterfall_model = waterfall_model;
        this.col_num = Math.floor(avalon(window).width()
            / this.col_width);
        this.init_num = this.col_num;
        for ( var j = 0; j < this.col_num; j++) {
          waterfall_model.img_list.push([]);
        }
        for ( var j = 0; j < this.col_num; j++) {
         // 第一行圖片
          var a={};
          a.src=getIndex(data[j].src);
          a.height=data[j].height;
          a.text=data[j].text;
          waterfall_model.img_list[j].push(a);
        }
        this.start=this.col_num;
      },
      add_item : function(i) {
        var a = this.find_shortest_col();
        var b={};
        var c=this.load_items[this.init_num+i];
        if(c){
          b.src=getIndex(c.src);
          b.height=c.height;
          b.text=c.text;
          waterfall_model.img_list[a].push(b);
        }
      },
      resize_item:function(i){
        //console.log(i);
        var a = this.find_shortest_col();
        var b={};
        var c=this.loaded_items[this.init_num+i];
        if(c){
          b.src=getIndex(c.src);
          b.height=c.height;
          b.text=c.text;
          waterfall_model.img_list[a].push(b);
        }
      }
    };
    var waterfall_model = avalon.define("waterfall",function(vm) {// vm
              vm.img_list = [];
              vm.rendered = function() {// 每次圖片加載渲染后執(zhí)行
                 
                if(waterfall.resizing){
                  if (waterfall.loaded_num+ waterfall.init_num<waterfall.loaded_items.length){
                    waterfall.loaded_num++;
                    waterfall.resize_item(waterfall.loaded_num);
                    //waterfall.start++;
                  }
                }else{
                   
                  if (waterfall.loaded_num + waterfall.init_num <waterfall.load_items.length){
                    waterfall.loaded_num++;
                    waterfall.add_item(waterfall.loaded_num);
                    waterfall.start++;
                  }
                }
              };
    });
  avalon.config({
    debug:false
  });
  avalon.scan();
  function debouncer( func , timeout ) {
      var timeoutID , timeout = timeout || 200;
      return function () {
       var scope = this , args = arguments;
       clearTimeout( timeoutID );
       timeoutID = setTimeout( function () {
         func.apply( scope , Array.prototype.slice.call( args ) );
       } , timeout );
      }
    }
  avalon.post("http://localhost/css/test.php?start=0", function(data) {
  // 加載第一次
    waterfall.init(data);
  }, "json");
  window.onscroll =debouncer( function ( e ) {
    var scrollTop = avalon(window).scrollTop(), windowHeight = avalon(
    window).height(), documentHeight = avalon(document).height();
    if (windowHeight + scrollTop==documentHeight) {
        avalon.post("http://localhost/css/test.php?start="+(waterfall.start), function(data) {
        // 加載第一次
        waterfall.resizing=false;
        waterfall.load_items=data;
        waterfall.loaded_items=waterfall.loaded_items.concat(data);
        waterfall.loaded_num =waterfall.init_num=0;
        waterfall.add_item(0);
        }, "json");
    }
  });
  window.onresize = debouncer( function ( e ) {
    var windowWidth = avalon(window).width(), k = Math
    .floor(windowWidth / 200), detect_left = avalon(
    $('waterFallDetect')).offset().left;
    if (Math.abs(detect_left) >= 199) {
      waterfall.col_num = Math.floor(avalon(window).width()
      / waterfall.col_width);
      waterfall_model.img_list = [];
      for ( var j = 0; j < waterfall.col_num; j++) {
        waterfall_model.img_list.push([]);
      }
      waterfall.resizing=true;
      waterfall.loaded_num =waterfall.init_num=0;
      //waterfall.start=0;
      waterfall.resize_item(0);
    }
  },30) ;
});

html

<div id='wrap' ms-controller="waterfall">
  <ul ms-each-els="img_list" id='wrap_row'>
    <li ms-each-el="els" ms-attr-id='row{{$index}}'
      data-each-rendered='rendered'>
      <p>
        <img
          ms-src="http://cued.xunlei.com/demos/publ/img/P_{{el.src}}.jpg"
          width='192' ms-attr-height='{{el.height}}'> <span>{{el.src}}</span>
      </p>
    </li>
    <li id='waterFallDetect' ms-if='$last'></li>
  </ul>
</div>

css

#wrap ul li {
display: inline-block;
*display: inline;
zoom: 1;
vertical-align: top;
font-size: 16px;
}
#wrap ul li p {
margin: 5px 2.5px;
border: 1px solid red;
min-width: 192px;
min-height: 100px;
}
#wrap span {
display: block;
}
#waterFallDetect {
width: 192px;
height: 100px;
border: 1px solid red;
}

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • javascript模塊化簡單解析

    javascript模塊化簡單解析

    這篇文章主要針對javascript模塊化為大家進(jìn)行簡單解析,如何寫一個模塊,在頁面中加載模塊的方法,感興趣的小伙伴們可以參考一下
    2016-04-04
  • JS如何定義用字符串拼接的變量

    JS如何定義用字符串拼接的變量

    這篇文章主要介紹了JS如何定義用字符串拼接的變量,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • 詳解?Map?和?WeakMap?區(qū)別以及使用場景

    詳解?Map?和?WeakMap?區(qū)別以及使用場景

    這篇文章主要介紹了詳解?Map?和?WeakMap?區(qū)別以及使用場景,Map本質(zhì)上是一個鍵值對的集合,WeakMap?只能將對象作為鍵名,下面來一起倆姐更多詳細(xì)內(nèi)容吧,希望這一篇文章能讓你對?Map?有更好的理解,或者能夠幫你理解?Map?和?WeakMap
    2022-01-01
  • js觸發(fā)select onchange事件的小技巧

    js觸發(fā)select onchange事件的小技巧

    select 或text的onchange事件需要手動改變select或text的值才能觸發(fā),下面有個不錯的方法可以通過js觸發(fā)select onchange事件
    2014-08-08
  • 基于IE下ul li 互相嵌套時的bug,排查,解決過程以及心得介紹

    基于IE下ul li 互相嵌套時的bug,排查,解決過程以及心得介紹

    昨天到今天上午都在查一個IE的bug,情形如下:通過異步請求獲取json數(shù)據(jù),然后拼接成html代碼,最后使用innerHTML類似方法插入到文檔流中。在chrome下和IE8\9下均表現(xiàn)正常。結(jié)果已進(jìn)入IE7,瀏覽器就崩潰,更別提IE6了,也是一副死給你看的樣子。于是我就把這個bug定位于IE6\7,其實這時候我已經(jīng)陷入了這個固定思維模式中,浪費(fèi)了不少時間
    2013-05-05
  • JavaScript的原型繼承詳解

    JavaScript的原型繼承詳解

    這篇文章主要詳細(xì)介紹了JavaScript的原型繼承的相關(guān)資料,十分詳細(xì),需要的朋友可以參考下
    2015-02-02
  • 淺談setTimeout 與 setInterval

    淺談setTimeout 與 setInterval

    實際上,setTimeout和setInterval的語法相同。它們都有兩個參數(shù),一個是將要執(zhí)行的代碼字符串,還有一個是以毫秒為單位的時間間隔,當(dāng)過了那個時間段之后就將執(zhí)行那段代碼。不過這兩個函數(shù)還是有區(qū)別的
    2015-06-06
  • Javascript之JSBridge初探

    Javascript之JSBridge初探

    這篇文章主要介紹了Javascript的JSBridge,對JSBridge感興趣的同學(xué),可以參考下
    2021-04-04
  • javascript字符串與數(shù)組轉(zhuǎn)換匯總

    javascript字符串與數(shù)組轉(zhuǎn)換匯總

    本文給大家分享的是Js中字符串轉(zhuǎn)換成數(shù)組,數(shù)組轉(zhuǎn)換成字符串的函數(shù),十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • 微信小程序中如何實現(xiàn)輪播圖效果

    微信小程序中如何實現(xiàn)輪播圖效果

    這篇文章主要介紹了微信小程序中實現(xiàn)輪播圖效果,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2024-03-03

最新評論

响水县| 通江县| 娱乐| 麟游县| 京山县| 平湖市| 顺平县| 邹平县| 从江县| 宁海县| 新余市| 灵川县| 沁阳市| 策勒县| 连云港市| 锡林浩特市| 南投市| 东丰县| 万全县| 繁峙县| 鄂温| 隆尧县| 昭通市| 定结县| 当阳市| 翁源县| 太白县| 新建县| 琼中| 凤山市| 驻马店市| 五河县| 抚远县| 汉源县| 黄浦区| 容城县| 黄浦区| 临朐县| 天峻县| 夏津县| 吴桥县|