JS实例-DOM知识

作者: lemontree2000 | 来源:发表于2016-10-19 00:49 被阅读0次

1、右下角悬浮框(富媒体):

右下角广告

在高级浏览器下可以直接用 <b>position:fixed 固定定位</b>

该实例主要解决IE6下的不兼容fixed的问题。

<b>知识点</b>

滚动高度/宽度:
html: document.documentElement
body: document.body

纵向:
    获取滚动高度:
    document.body.scrollTop
    兼容:Chrome
    FF/IE: 0

    document.documentElement.scrollTop
    兼容:FF/IE
    Chrome: 0
        
    兼容版:
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

横向:
滚动的宽度
兼容问题同上。

    兼容版:
    var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;

可视区高度:

可视区 - 就是你能看见的区域的大小
    
    document.documentElement.clientHeight

可视区宽度:
    document.documentElement.clientWidth

物体本身的高度、宽度:
物体 -> obj
obj.offsetHeight
obj.offsetWidth

取的是盒子模型的高度/宽度

盒子模型:width/height + padding + border + margin

盒子模型大小:width/height + padding + border

offsetHeight的返回值是number , 大小是盒模型大小,当display:none 时获取的值为 0

<b>事件</b>
window.onscroll
当滚动滚动条的时候
window.onresize
当缩放浏览器的时候

代码


<style>

body {height:2000px;}

div {width:200px;height:200px;background:blue;  position:fixed;_position:absolute;right:5px;bottom:10px;font-size:100px;text-align:center;line-height:200px;color:#fff;}
</style>

<script>

//ie 6 兼容写法

if (window.navigator.userAgent.toLowerCase().indexOf('msie 6.0') != -1) {

    window.onload = window.onscroll = window.onresize = function () {

        var oBox = document.getElementById('box');

        var scrollTop = document.documentElement.scrollTop||document.body.scrollTop;

        var clientHeight = document.documentElement.clientHeight;

        var oHeight = oBox.offsetHeight;
  
        oBox.style.top = (scrollTop + clientHeight -oHeight)+'px';

    };
}
</script>

<body>
    <div id="box">广告</div>
</body>


2、懒加载()

物体距离左边/上边的距离:
父级:
a). parentNode -> 结构上的父级
b). offsetParent -> 定位父级
祖宗: body
物体 -> obj

左边:obj.offsetLeft 
    物体距离有定位父级的左边的一个距离
上边:obj.offsetTop
    物体距离有定位父级的上边的一个距离

求物体距离上边/左边的绝对距离:
getPos(obj);

function getPos(obj) {
   var l = 0;
   var t = 0;
   while(obj) {
    l += obj.offsetLeft;
    t += obj.offsetTop;
    // 换定位父级
    obj = obj.offsetParent;
   }
   return {left: l, top: t};
}

慢点加载
原因:节约资源,节约带宽,节省钱

查看是否加载
chrome -> network -> 加载痕迹

怎么让一个图片不加载 ?
不给src,在需要的时候给
写_src 约定俗成

定义属性:
a). . 点
b). [] 中括号
c). obj.getAttribute('自定义属性名字');

设置自定义属性:
obj.aaa = xxx;
obj.setAttribute('自定义属性名字','值是多少');

删除自定义属性
obj.removeAttribute('自定义属性名字');

*** 自定义属性的方法方式不能混合使用
代码
<style>
* {margin:0;padding:0;list-style:none;}
ul li {width:300px;height:300px;border:1px solid #000;margin:10px;float:left;   }
ul li img {width:100%;  }
</style>

<script>
    function getPos(obj) {
        var l = 0; //默认左边距离
        var t = 0; //默认高度
        //循环 获取l 和 t 的值
        while (obj) {
           l += obj.offsetLeft;
           t += obj.offsetTop;
          obj = obj.Offsetparent;
        }
        return {top: t, left: l};
     }
    window.onload = window.onscroll = window.onresize = function () {
        var oBox = document.getElementById('box');
        var aImg = oBox.getElementsByTagName('img');
        //获取滚动高度
        var scrollT = document.documentElement.scrollTop||document.body.scrollTop;
        //获取可视区高度
        var clientH =document.documentElement.clientHeight;
        //循环改变符合条件img的src
        for (var i = 0; i < aImg.length; i++) {
            if (scrollT + clientH >= getPos(aImg[i]).top) {
                aImg[i].src = aImg[i].getAttribute('_src');
            }

        }
    };
</script>

<body>
<ul id="box">
  <li><img _src="cat/1.jpg" alt="..."/></li>
  <li><img _src="cat/2.jpg" alt="..."/></li>
  <li><img _src="cat/3.jpg" alt="..."/></li>
  <li><img _src="cat/4.jpg" alt="..."/></li>
  <li><img _src="cat/5.jpg" alt="..."/></li>
  <li><img _src="cat/6.jpg" alt="..."/></li>
  <li><img _src="cat/7.jpg" alt="..."/></li>
  <li><img _src="cat/8.jpg" alt="..."/></li>
  <li><img _src="cat/9.jpg" alt="..."/></li>
  <li><img _src="cat/10.jpg" alt="..."/></li>
  <li><img _src="cat/11.jpg" alt="..."/></li>
  <li><img _src="cat/12.jpg" alt="..."/></li>
</ul>

3、简单瀑布流(花瓣网):

特点:
a). 宽度一致,高度是参差不齐
b). 滚不完

aUl -> 伪数组
    没有数组的方法

物体的<b>内容</b>高度:
物体 -> obj
obj.scrollHeight

注意点:
如果内容的高度小于盒模型的高度,取盒模型的高度
如果内容的高度大于盒模型的高度,取内容的高度

效果:


简单瀑布流

代码:

<style>
div {width:1100px;margin: 0 auto;   }
div ul{width:200px;margin:10px;border:1px solid #000;float:left;list-style:none;}
div ul li{width:180px;margin:10px;}
</style>

<script>
      function rnd(n,m) {
          return parseInt(Math.random()*(m-n)+n);
      }

      function createLi() {
          var oLi = document.createElement('li');
          oLi.style.height = rnd(200,400) +'px';
          oLi.style.background = 'rgb('+rnd(0,256)+','+rnd(0,256)+','+rnd(0,256)+')';
          return oLi;
      }
      window.onload = function () {
          var oBox = document.getElementById('box');
          var aUl = oBox.children;  
          function createLi20() {
              for (var i = 0; i < 20; i++) {
              var oLi = createLi();
              var arr = [];
              for (var k = 0; k <aUl.length; k++) {
                  arr.push(aUl[k]);
              }
              arr.sort(function (ul1, ul2) {
                  return ul1.offsetHeight - ul2.offsetHeight;
              });
              arr[0].appendChild(oLi);
            }   
          }

          createLi20();
          window.onscroll = function () {
              var scrollT = document.documentElement.scrollTop||document.body.scrollTop;
              var clientH = document.documentElement.clientHeight;
              var iH = document.body.scrollHeight;
              if (scrollT + clientH >= iH) {
                  createLi20();
              }
          };
      };
</script>

<body>
<div id = "box">
    <ul></ul>
    <ul></ul>
    <ul></ul>
    <ul></ul>
</div>

相关文章

  • JS实例-DOM知识

    1、右下角悬浮框(富媒体): 在高级浏览器下可以直接用 position:fixed 固定定位 该实例...

  • 2018-07-15

    DOM中的函数 鼠标移入移出实例 HTNL代码 js代码 点击事件实例 HTML代码 js代码

  • React.Component概览与解析

    Component的源代码在ReactBaseClasses.js中。 生命周期: 挂载: 组件实例化并插入dom...

  • 【JS脚丫系列】JS基础知识脉络 By 吃码小妖

    初级前端工程师的必备知识点JS基础知识脉络 By 吃码小妖 图片版 JS之DOM对象知识脉络 By 吃码小妖

  • js DOM相关知识

    childNodes:所有的子节点 在火狐中会将父节点下面的每一个空行也算作一个子节点noteType:节点类型...

  • Day7:virtual dom & MVVM

    virtual dom 什么是virtual dom 虚拟dom 用JS模拟DOM结构 DOM变化的对比,放在JS...

  • virtual dom

    virtual dom --- 即虚拟dom 1.用js模拟DOM结构 2.DOM变化的对比,放在js层来做(js...

  • Vue.js 模板语法

    Vue.js使用了基于HTML的模版语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据。 Vue.js 的...

  • js、jq、ajax、linux基础面试点

    js的基本语法延伸:js内置对象延伸:js HTML DOM对象延伸:jQ基础知识 Ajax的基本工作原理延伸:j...

  • vue.js模板

    vue.js模板语法 vue.js使用了基于HTML的模版语法,允许开发者声明式地将Dom绑定至底层vue实例的数...

网友评论

    本文标题:JS实例-DOM知识

    本文链接:https://www.haomeiwen.com/subject/jrntuttx.html