boxes的值为何会自动追加

来源:5-2 作业题

qq_天陨_0

2018-01-18 13:23:53

var a=0;
window.onload = function() {
  //获得外层以及每一个盒子
  var container = document.getElementById('wrap');
  var boxes = container.getElementsByTagName('div');
   //运行瀑布流主函数
   waterfall(container, boxes);
   console.log(++a);
   //模拟数据
   var data = [{
       "src": "1.png",
       "title": "第一怪 竹筒当烟袋"
   }, {
       "src": "2.png",
       "title": "第二怪 草帽当锅盖"
   }];

   //设置滚动加载
   window.onscroll = function() {
       //校验数据请求
       if (getCheck()) {
           //var wrap = container;
           for (i in data) {
               //创建figure
               var figure = document.createElement('div');
               container.appendChild(figure);
               //创建img
               var img = document.createElement('img');
               img.src = 'images/' + data[i].src;
               //img.style.height = 'auto';
               figure.appendChild(img);
               //创建a标记
               var a = document.createElement('a');
               a.href = "http://www.imooc.com";
               a.target = "_blank";
               a.innerHTML = data[i].title;
               figure.appendChild(a);
           };
           console.log(boxes.length);
           waterfall(container, boxes);
       };
   };
};

滚动追加元素后,boxes的值为什么也会自动追加呢?


jQuery

window.onload=function(){
   var warp=$('#container'),
       box=warp.children('div');
   waterfall(warp,box);
   var data = [{
       "src": "1.png",
       "title": "第一怪 竹筒当烟袋"
   }, {
       "src": "2.png",
       "title": "第二怪 草帽当锅盖"
   }];
   //追加图片
   $(document).scroll(function(){
      if($(this).scrollTop()+$(window).height()>=$(this).height()){
          for(var i=0;i<data.length;i++){
               warp.append('<div><a href="#"><img src="img/'+data[i].src+'" alt=""><span>'+data[i].title+'</span></a></div>');
          }
          box=warp.children('div');//
有什么办法可以像js一样省掉这一步           

          waterfall(warp,box);
      }
   });
};

写回答

5回答

一路电光带火花

2018-01-18

var boxes = container.getElementsByTagName('div');”获取到的是个数组对象,可以按照你的第二种方式理解的 


0
hq_天陨_0
h 请问,如何用jQuery达到同样的效果
h018-01-18
共1条回复

海纳百川_

2018-01-19

每种方式都有它的益处和弊端,用jQuery方式的话,必须要重新获取一下div元素。

0
hq_天陨_0
h 好的,非常谢谢
h018-01-19
共1条回复

海纳百川_

2018-01-19

你粘贴的这些代码乱乱的,你是想省略哪一步呀

0
hq_天陨_0
h 用js滚动追加元素后,boxes的值会自动追加。 用jQuery怎样实现同样的自动追加
h018-01-19
共1条回复

海纳百川_

2018-01-19

就把里面用到的一些方法,获取元素的方式呀,宽度高度的获取什么的,换成jquery的方式就行了。总体的写法还是和原生的一样的,只是使用jquery会将代码简化些。

0
hq_天陨_0
h window.onload=function(){ var warp=$('#container'), box=warp.children('div'); waterfall(warp,box); //追加图片 $(document).scroll(function(){ if($(this).scrollTop()+$(window).height()>=$(this).height()){ for(var i=0;i<data.length;i++){ warp.append('<div><a href="#"><img src="img/' + data[i].src+'" alt=""><span>'+data[i].title+'</span></a></div>'); } box=warp.children('div'); //有什么办法可以像js一样省掉这一步 waterfall(warp,box); } }); };
h018-01-19
共1条回复

怎么都被占用了呢

2018-01-18

因为这一步呀

container.appendChild(figure);

滚动的时候,如果符合追加的条件,就创建div,然后添加到container盒子内,boxes是container中所有的子div,数量肯定是在增加的呀

0
hq_天陨_0
h 就是这里没懂,“var boxes = container.getElementsByTagName('div');”只获取了一次,“container.appendChild(figure);”是添加到dom里。boxes为什么会动态变化?js调用boxes的时候是会重新操作dom获取“div”;还是boxes相当于是一个指针指向div元素,而div元素在浏览器中分配了一个地址呈有规则的排列。
h018-01-18
共1条回复

0 学习 · 36712 问题

查看课程