最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

js实现瀑布流的一种简单方法实例分享_javascript技巧

来源:动视网 责编:小采 时间:2020-11-27 21:15:00
文档

js实现瀑布流的一种简单方法实例分享_javascript技巧

js实现瀑布流的一种简单方法实例分享_javascript技巧:下面奉上一则用JS实现瀑布流的方法,望批评。 代码如下:瀑布流布局测试body { background-color: #eee; font-size: 84%; text-align: justify;}.column { display: inline-block; vertical-align: top;}.pic_a
推荐度:
导读js实现瀑布流的一种简单方法实例分享_javascript技巧:下面奉上一则用JS实现瀑布流的方法,望批评。 代码如下:瀑布流布局测试body { background-color: #eee; font-size: 84%; text-align: justify;}.column { display: inline-block; vertical-align: top;}.pic_a
 下面奉上一则用JS实现瀑布流的方法,望批评。

代码如下:




瀑布流布局测试




var waterFall = {
container: document.getElementById("container"),
columnNumber: 1,
columnWidth: 210,
// P_001.jpg ~ P_160.jpg
rootImage: "test/",
indexImage: 0,

scrollTop: document.documentElement.scrollTop || document.body.scrollTop,
detectLeft: 0,

loadFinish: false,

// 返回固定格式的图片名
getIndex: function() {
var index = this.indexImage;
if (index < 10) {
index = "00" + index;
} else if (index < 100) {
index = "0" + index;
}
return index;
},

// 是否滚动载入的检测
appendDetect: function() {
var start = 0;
for (start; start < this.columnNumber; start++) {
var eleColumn = document.getElementById("waterFallColumn_" + start);
if (eleColumn && !this.loadFinish) {
if (eleColumn.offsetTop + eleColumn.clientHeight < this.scrollTop + (window.innerHeight || document.documentElement.clientHeight)) {
this.append(eleColumn);
}
}
}

return this;
},

// 滚动载入
append: function(column) {
this.indexImage += 1;
var html = '', index = this.getIndex(), imgUrl = this.rootImage + "P_" + index + ".jpg";

// 图片尺寸
var aEle = document.createElement("a");
aEle.href = "###";
aEle.className = "pic_a";
aEle.innerHTML = ''+ index +'';
column.appendChild(aEle);

if (index >= 160) {
//alert("图片加载光光了!");
this.loadFinish = true;
}

return this;
},

// 页面加载初始创建
create: function() {
this.columnNumber = Math.floor(document.body.clientWidth / this.columnWidth);

var start = 0, htmlColumn = '', self = this;
for (start; start < this.columnNumber; start+=1) {
htmlColumn = htmlColumn + ''+
function() {
var html = '', i = 0;
for (i=0; i<5; i+=1) {
self.indexImage = start + self.columnNumber * i;
var index = self.getIndex();
html = html + ''+ index +'';
}
return html;
}() +
' ';
}
htmlColumn += '';

this.container.innerHTML = htmlColumn;

this.detectLeft = document.getElementById("waterFallDetect").offsetLeft;
return this;
},

refresh: function() {
var arrHtml = [], arrTemp = [], htmlAll = '', start = 0, maxLength = 0;
for (start; start < this.columnNumber; start+=1) {
var arrColumn = document.getElementById("waterFallColumn_" + start).innerHTML.match(//gi);
if (arrColumn) {
maxLength = Math.max(maxLength, arrColumn.length);
// arrTemp是一个二维数组
arrTemp.push(arrColumn);
}
}

// 需要重新排序
var lengthStart, arrStart;
for (lengthStart = 0; lengthStart for (arrStart = 0; arrStart if (arrTemp[arrStart][lengthStart]) {
arrHtml.push(arrTemp[arrStart][lengthStart]);
}
}
}


if (arrHtml && arrHtml.length !== 0) {
// 新栏个数
this.columnNumber = Math.floor(document.body.clientWidth / this.columnWidth);

// 计算每列的行数
// 向下取整
var line = Math.floor(arrHtml.length / this.columnNumber);

// 重新组装HTML
var newStart = 0, htmlColumn = '', self = this;
for (newStart; newStart < this.columnNumber; newStart+=1) {
htmlColumn = htmlColumn + ''+
function() {
var html = '', i = 0;
for (i=0; i html += arrHtml[newStart + self.columnNumber * i];
}
// 是否补足余数
html = html + (arrHtml[newStart + self.columnNumber * line] || '');

return html;
}() +
' ';
}
htmlColumn += '';

this.container.innerHTML = htmlColumn;

this.detectLeft = document.getElementById("waterFallDetect").offsetLeft;

// 检测
this.appendDetect();
}
return this;
},

// 滚动加载
scroll: function() {
var self = this;
window.onscroll = function() {
// 为提高性能,滚动前后距离大于100像素再处理
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
if (!this.loadFinish && Math.abs(scrollTop - self.scrollTop) > 100) {
self.scrollTop = scrollTop;
self.appendDetect();
}

};
return this;
},

// 浏览器窗口大小变换
resize: function() {
var self = this;
window.onresize = function() {
var eleDetect = document.getElementById("waterFallDetect"), detectLeft = eleDetect && eleDetect.offsetLeft;
if (detectLeft && Math.abs(detectLeft - self.detectLeft) > 50) {
// 检测标签偏移异常,认为布局要改变
self.refresh();
}
};
return this;
},
init: function() {
if (this.container) {
this.create().scroll().resize();
}
}
};
waterFall.init();



文档

js实现瀑布流的一种简单方法实例分享_javascript技巧

js实现瀑布流的一种简单方法实例分享_javascript技巧:下面奉上一则用JS实现瀑布流的方法,望批评。 代码如下:瀑布流布局测试body { background-color: #eee; font-size: 84%; text-align: justify;}.column { display: inline-block; vertical-align: top;}.pic_a
推荐度:
标签: 技巧 实现 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top