c语言switch瀑布流,js原生瀑布流

//面向对象实现

function WaterFall(obj) {

this.containerW = obj.containerW || 800;

this.childW = obj.childW || 192;

this.childList = obj.childList;

this.imglist = obj.imglist

//3、计算出colum列

this.colum = parseInt(this.containerW / this.childW)

//4、计算出空隙

this.space = (this.containerW - this.colum * this.childW) / (this.colum - 1)

this.heightArr = [];

}

WaterFall.prototype.init = function() {

this.setDefault();

this.loadMore()

//下面的是为了判断当 cssMedia Screen设置窗口改变的时候重新设置container的宽度,从而重新传入container的width

window.onresize = function() {

switch ($('.container').width()) {

case 800:

var WF = new WaterFall({

containerW: 800,

childW: itemW,

childList: items,

imglist: imglist

})

WF.init()

break;

case 1000:

var WF = new WaterFall({

containerW: 1000,

childW: itemW,

childList: items,

imglist: imglist

})

WF.init()

break;

}

}

}

WaterFall.prototype.setDefault = function() {

console.log(2, this.colum, this.space)

for (var i = 0; i < this.childList.length; i++) {

if (i < this.colum) {

this.childList[i].style.left = (this.childW + this.space) * i + 'px';

//重新更新数组中的高度

this.heightArr[i] = this.childList[i].offsetHeight;

} else {

this.childList[i].style.left = (this.childW + this.space) * getMin(this.heightArr).minIndex + 'px';

this.childList[i].style.top = getMin(this.heightArr).minHeight + this.space + 'px';

this.heightArr[getMin(this.heightArr).minIndex] = getMin(this.heightArr).minHeight + this.space + this.childList[i].offsetHeight;

}

}

}

WaterFall.prototype.loadMore = function() {

var that = this;

console.log(that)

window.onscroll = function() {

// pageXOffset 设置或返回当前页面相对于窗口显示区左上角的 X 位置。pageYOffset 设置或返回当前页面相对于窗口显示区左上角的 Y 位置。

// pageXOffset 和 pageYOffset 属性相等于 scrollX 和 scrollY 属性。

// 这些属性是只读的。

// console.log(window.pageYOffset, window.innerHeight, window.pageYOffset + window.innerHeight, getMin(heightArr).minHeight)

if (window.pageYOffset + window.innerHeight > getMin(that.heightArr).minHeight) {

for (var i = 0; i < that.imglist.length; i++) {

createItem(that.imglist[i].src)

}

that.setDefault();

}

}

function createItem(src) {

var divItem = document.createElement('div')

divItem.className = 'item'

var img = document.createElement('img')

img.src = src

divItem.append(img)

container.append(divItem)

}

}

//定义获取数组中最小值目的是:当前四列中的最小高度值,以及索引

function getMin(arr) {

var obj = {};

obj.minHeight = arr[0];

obj.minIndex = 0;

for (var i = 0; i < arr.length; i++) {

if (obj.minHeight > arr[i]) {

obj.minHeight = arr[i]

obj.minIndex = i;

}

}

return obj;

}

//开始定义需要传入构造函数的变量

// 获取最外边container的宽度

var container = document.getElementsByClassName('container')[0];

var CW = container.OffsetWidth

// 获取每一个item的宽度

var items = document.getElementsByClassName('item');

var itemW = items[0].offsetWidth;

console.log(CW, itemW)

var imglist = [{

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}, {

src: 'http://www.jq22.com/img/cs/500x300-1.png'

}]

var WF = new WaterFall({

containerW: CW,

childW: itemW,

childList: items,

imglist: imglist

})

WF.init()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值