瀑布自适应问题的Javascript实现及解决方案
最近几天,我看了艾米老师用javascript来实现瀑布,我跟着代码走了出来。发现这样的文字只能装第一次才能适应屏幕,然后改变窗口的大小不能自适应。所以我想利用window.onresize从新加载实现目标使瀑布功能,
复制代码代码如下所示:
窗口。指针函数(){
瀑布流函数
瀑布('content','box);
模拟数据加载
无功dataint = {数据:{ {src:01。jpg},{src:02。jpg},{src:03。jpg},{src :04。jpg},{src:05。jpg},{src:06。JPG },{src:07.jpg} } }
当屏幕大小发生变化时,来自新功能的流以适应新的执行下降的角色。
窗口。onresize =函数(){
/ /瀑布('content','box);
setTimeout(函数(){瀑布('content','box ');},200);
}
窗口。onscroll =函数(){
如果(checkscroll()){
无功oparent = document.getelementbyid('content');
将数据添加到html中的影响
对于(var i = 0;i < dataint.data.length;i++){
无功obox = document.createelement(div);
obox.classname =盒子;
oparent.appendchild(obox);
VaR OPIC = document.createelement(div);
opic.classname =PIC;
obox.appendchild(OPIC);
无功oimg = document.createelement(IMG);
OImg。src=IMG / + dataint。数据{我},SRC;
opic.appendchild(oimg);
}
瀑布('content','box);
}
}
}
当屏幕缩小时,它是可以的,但缩放的大小是错误的。
我看不到后面几根柱子的顶部。
于是我打开工具,看看发生了什么事。
不应该有风格第三百四十五DIV,因为减少了对总计达他时间,他没有明显的放大,保存会出现这样我在瀑布流功能里加一盒{我}。style.csstext = '';所以在所有空的风格
复制代码代码如下所示:
函数瀑布(父,框){
内容类框将全部去掉
VaR的父母= document.getelementbyid(母);
VaR的ABox = getbclass(父母、箱);
获取框的宽度
无功aboxw = ABOX { 0 }。offsetwidth;
但浏览器的宽度是由栏数的宽度来划分的。
var列= math.floor(文档。文档元素}。clientwidth / aboxw);
设置宽度和中心内容
aparent.style.csstext = 'width:+ aboxw *一+ 'px;高度:汽车;位置:相对;保证金:0自动填充右:15px;
创建每个列数组的高度
VaR Harr = { };
对于(var i = 0;i < abox.length;i++){
一盒{我}。style.csstext =;
如果(我<列){
HArr.push(ABOX {我}。offsetheight);
其他{ }
var胡志明= math.min.apply(null,Harr);
VaR指标= getminindex(Harr,Minh); / /找到最短的高指标值
/ / console.log(aboxw);
一盒{我}。style.position =绝对的;
一盒{我}。style.top =胡志明+ 'px;
一盒{我}。style.left = aboxw *指数+ 'px;
Harr { } = {我指数一offsetheight };
}
}
}
这样,在还原后不能返回的错误可以是自适应的。
最后,我把整个Javascript
复制代码代码如下所示:
窗口。指针函数(){
瀑布流函数
瀑布('content','box);
模拟数据加载
无功dataint = {数据:{ {src:01。jpg},{src:02。jpg},{src:03。jpg},{src :04。jpg},{src:05。jpg},{src:06。JPG },{src:07.jpg} } }
当屏幕大小发生变化时,来自新功能的流以适应新的执行下降的角色。
窗口。onresize =函数(){
/ /瀑布('content','box);
setTimeout(函数(){瀑布('content','box ');},200);
}
窗口。onscroll =函数(){
如果(checkscroll()){
无功oparent = document.getelementbyid('content');
将数据添加到html中的影响
对于(var i = 0;i < dataint.data.length;i++){
无功obox = document.createelement(div);
obox.classname =盒子;
oparent.appendchild(obox);
VaR OPIC = document.createelement(div);
opic.classname =PIC;
obox.appendchild(OPIC);
无功oimg = document.createelement(IMG);
OImg。src=IMG / + dataint。数据{我},SRC;
opic.appendchild(oimg);
}
瀑布('content','box);
}
}
}
函数瀑布(父,框){
内容类框将全部去掉
VaR的父母= document.getelementbyid(母);
VaR的ABox = getbclass(父母、箱);
获取框的宽度
无功aboxw = ABOX { 0 }。offsetwidth;
但浏览器的宽度是由栏数的宽度来划分的。
var列= math.floor(文档。文档元素}。clientwidth / aboxw);
设置宽度和中心内容
aparent.style.csstext = 'width:+ aboxw *一+ 'px;高度:汽车;位置:相对;保证金:0自动填充右:15px;
创建每个列数组的高度
VaR Harr = { };
对于(var i = 0;i < abox.length;i++){
一盒{我}。style.csstext =;
如果(我<列){
HArr.push(ABOX {我}。offsetheight);
其他{ }
var胡志明= math.min.apply(null,Harr);
VaR指标= getminindex(Harr,Minh); / /找到最短的高指标值
/ / console.log(aboxw);
一盒{我}。style.position =绝对的;
一盒{我}。style.top =胡志明+ 'px;
一盒{我}。style.left = aboxw *指数+ 'px;
Harr { } = {我指数一offsetheight };
}
}
}
根据类获取元素
功能getbclass(父母,className){
无功boxarr =新(阵列); / /被用来存储类
/ / console.log(母。原型);
allelement = parent.getelementsbytagname(*);
对于(var i = 0;i < allelement.length;i++){
如果(allelement {我}。类名= = className){
Boxarr.push(allelement {我});
}
}
返回boxarr;
}
查找最短的高/中索引值
功能getminindex(ARR值){
对于(var i在ARR){
如果(ARR {我} = =值){
还我;
}
}
}
建立一个圆形检测函数/滑动函数来恢复真与假的建立。
功能checkscroll(){
无功oparent = document.getelementbyid(内容);
无功obox = getbclass(oparent,'box);
无功lastoboxtop = obox { obox。length-1 }。offsettop + math.floor(obox { obox。length-1 }。offsetheight / 2);
/ / console.log(lastoboxtop);
VaR scrollTop =文件。身体。scrollTop | | document.documentelement.scrolltop;
VaR高度=文件。身体。自己的| | document.documentelement.clientheight;
/ / console.log(scrollTop);
返回(lastoboxtop < scrollTop +高)真的假的;
}
CSS文件被张贴
复制代码代码如下所示:
*边距:0;填充:0;}
体{背景颜色:# EEE;}
内容{。
职位:相对;
}
箱{。
填充物:00 15px 15px;
浮点数:左;
}
PIC {。
填料:10px;
边境:1px solid # CCC;
盒子的影子:00 5px # cccccc;
边界半径:5px;
背景:# FFF;
}
PIC img {。
宽度:220px;
高度:自动;
边境:1px solid # Eee;
}
HTML文件被张贴
复制代码代码如下所示:
Javascript的瀑布流
好的,谢谢收看。我还没有写任何技术分享文章之前,有很多希望你能够改正不好的地方。从学习的菜鸟的前端(^ _ ^)Y