javascript ybmiaov

DOM

DOM基础
1. DOM简介、DOM标准、DOM节点
2. 获取元素的子节点:childNodes、兼容性问题
3. 节点类型:nodeType、文本节点、元素节点
4. children的使用
5. 获取元素父节点parentNode
6. 获取定位元素的父节点offsetParent
7. 获取首尾子元素:firstChild、firstElementChild、lastChild、lastElementChild
8. 获取兄弟节点:nextSibling、nextElemnetSibling、previousSibling、previousElementSibling
9. 元素属性操作:“.”与“[]”回顾、setAttribute、getAttribute、removeAttribute
10. 通过className获取元素、封装getByClass函数
<!-- DOM节点1
childNodes    nodeType
获取子节点
children
parentNode
例子:点击链接,隐藏整个li
offsetParent
例子:获取元素在页面上的实际位置 -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload = function() {
            alert(document.body.childNodes[1].nodeType);
        }
    </script>
</head>
<body>
    aaafsa
    <span>fff</span>
</body>
</html>

<!-- 
childNodes 和 nodeType (1)
nodeType: 1.element 2.attr 3.text
nodeName nodeValue -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload = function() 
        {
            var oUl = document.getElementById('ul1');
            var i = 0;

            for(i; i< oUl.childNodes.length; i++) 
            {
                if(oUl.childNodes[i].nodeType == 1)
                {
                    oUl.childNodes[i].style.background='red';
                }
            }
        }
    </script>
</head>
<body>
    <ul id="ul1">
        <li>asd</li>
        <li>asd</li>
        <li>asd</li>
    </ul>
</body>
</html>

<!-- childNodes 和 nodeType(2) -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload = function() 
        {
            var aA = document.getElementsByTagName('a');
            var i = 0;

            for(i; i< aA.length; i++)
            {
                aA[i].onclick = function()
                {
                    this.parentNode.style.display = 'none';
                }
            }
        }
    </script>
</head>
<body>
    <ul>
        <li>aass<a href="javascript:">隐藏</a></li>
        <li>5453<a href="javascript:">隐藏</a></li>
        <li>cvxc<a href="javascript:">隐藏</a></li>
        <li>ertert<a href="javascript:">隐藏</a></li>
    </ul>
</body>
</html>

<!-- parentNode -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
    
    </script>
</head>
<body>
    <div id="div1" style="100px; height:100px; background:red; margin:100px;">
        <div id="div2" onclick="alert(this.offsetParent.tagName)" style="100px; height:100px; background:yellow; position:absolute; left:100px; top:100px;"></div>
    </div>
</body>
</html>

<!-- offsetParent -->
View Code
<!-- DOM节点(2)
首尾子节点
有兼容性问题
firstChild、firstElementChild 
lastChild 、lastElementChild
兄弟节点
有兼容性问题
nextSibling、nextElementSibling
previousSibling、previousElementSibling


元素属性操作
第一种:oDiv.style.display=“block”;
第二种:oDiv.style[“display”]=“block”;
第三种:Dom方式
DOM方式操作元素属性
获取:getAttribute(名称)
设置:setAttribute(名称, 值)
删除:removeAttribute(名称)

用className选择元素
如何用className选择元素
选出所有元素
通过className条件筛选
封装成函数 -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload = function()
        {
            var oUl = document.getElementById('ul1');

            //IE || FF
            var oFirst = oUl.firstElementChild || oUl.firstChild;

            oFirst.style.background = 'red';
        }
    </script>
</head>
<body>
    <ul id="ul1">
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

<!-- firstChild/firstElementChild -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oLi=document.getElementById('li1');

            oLi.previousSibling.style.background = 'red';
        }
    </script>
</head>
<body>
    <ul id="ul1">
        <li></li>
        <li></li>
        <li id='li1'>111</li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

<!-- Uncaught TypeError: Cannot set property 'backgroundColor' of undefined -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oUl=document.getElementById('ul1');
            var aLi=oUl.getElementsByTagName('li');
            var i=0;

            for(i; i<aLi.length; i++)
            {
                if(aLi[i].className=='box')
                {
                    aLi[i].style.background='red';
                }
            }
        }
    </script>
</head>
<body>
    <ul id="ul1">
        <li></li>
        <li></li>
        <li></li>
        <li class='box'></li>
        <li></li>
        <li class='box'></li>
        <li class='box'></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

<!-- className -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>无标题文档</title>
    <script type="text/javascript">
        function getByClass(oParent, sClass)
        {
            var aEle=oParent.getElementsByTagName('*');
            var aResult=[];

            for(var i=0;i<aEle.length;i++)
            {
                if(aEle[i].className==sClass)
                {
                    aResult.push(aEle[i]);
                }
            }

            return aResult;
        }

        window.onload=function ()
        {
            var oUl=document.getElementById('ul1');
            var aBox=getByClass(oUl, 'box');
            var i=0;

            for(i; i<aLi.length; i++)
            {
                
            }
        }
    </script>
</head>
<body>
    <ul id="ul1">
        <li></li>
        <li></li>
        <li></li>
        <li class='box'></li>
        <li></li>
        <li class='box'></li>
        <li class='box'></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
</body>
</html>

<!-- className提取元素 -->
View Code
创建DOM元素
createElement(标签名)        创建一个节点
appendChild(节点)            追加一个节点
例子:为ul插入li
插入元素
insertBefore(节点, 原有节点)    在已有元素前插入
例子:倒序插入li
删除DOM元素
removeChild(节点)            删除一个节点
例子:删除li
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var oLi=document.createElement('li');

                oUl.appendChild(oLi);
            }
        }
    </script>
</head>
<body>
    <input type="button" id="btn1" value="创建Li">
    <ul id="ul1">
        <li>aaa</li>
    </ul>
</body>
</html>

<!-- appendChild -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oBtn=document.getElementById('btn1');
            var oTxt=document.getElementById('txt1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var oLi=document.createElement('li');
                oLi.innerHTML = oTxt.value;

                oUl.appendChild(oLi);

            }
        }
    </script>
</head>
<body>
    <input type="text" id="txt1">
    <input type="button" id="btn1" value="创建Li">

    <ul id="ul1">
        <li>aaa</li>
    </ul>
</body>
</html>

<!-- appendChild,get txt from input -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oTxt=document.getElementById('txt1');
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var oLi=document.createElement('li');
                var aLi=document.getElementsByTagName('li');
                oLi.innerHTML=oTxt.value;

                oUl.insertBefore(oLi, aLi[0]);
            }
        }
    </script>
</head>
<body>
    <input id="txt1" type="text"/>
    <input id="btn1" type="text" value="创建Li"/>
    <ul id="ul1">
        <li>aaa</li>
    </ul>
</body>
</html>

<!-- insertBefore
this type should be button:<input id="btn1" type="text" value="创建Li"/> -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript">
        window.onload=function ()
        {
            var oTxt=document.getElementById('txt1');
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var oLi=document.createElement('li');
                var aLi=document.getElementsByTagName('li');
                oLi.innerHTML=oTxt.value;

                if(aLi.length==0)
                {
                    oUl.appendChild(oLi);
                }
                else
                {
                    oUl.insertBefore(oLi,aLi[0]);
                }
            }
        }
    </script>
</head>
<body>
    <input id="txt1" type="text"/>
    <input id="btn1" type="button" value="创建Li"/>
    <ul id="ul1">
    </ul>
</body>
</html>

<!-- if exists appendChild else insertBefore
innerHTMl is got for value  -->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
    window.onload=function ()
    {
        var aA=document.getElmentByTag('a');
        var oUl=document.getElementById('ul1');
        var i=0;

        for(i=0;i<aA.length;i++)
        {
            aA[i].onclick=function()
            {
                oUl.removeChild(this.parentNode);
            }
        }
    }
</script>
</head>

<body>
<ul id="ul1">
    <li>sdfsdf <a href="javascript:;">删除</a></li>
    <li>3432 <a href="javascript:;">删除</a></li>
    <li>tttt <a href="javascript:;">删除</a></li>
    <li>ww <a href="javascript:;">删除</a></li>
</ul>
</body>
</html>

<!-- ancestor.removeChild(parent) -->
View Code
文档碎片
文档碎片可以提高DOM操作性能(理论上)
文档碎片原理
document.createDocumentFragment()
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function ()
        {
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var iStart=new Date().getTime();
                var i=0;

                for(i=0;i<100000;i++)
                {
                    var oLi=document.createElement('li');
                    oUl.appendChild(oLi);
                }

                alert(new Date().getTime()-iStart);
            }
        }
    </script>
</head>
<body>
    <input type="button" id="btn1" value='普通'/>
    <ul id="ul1"></ul>
</body>
</html>

<!-- getIntervalTime -->

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script>
        window.onload=function ()
        {
            var oBtn=document.getElementById('btn1');
            var oUl=document.getElementById('ul1');

            oBtn.onclick=function ()
            {
                var iStart=new Date().getTime();
                var oFrag=document.createDocumentFragment();
                var i=0;

                for(i=0;i<100000;i++)
                {
                    var oLi=document.createElement('li');
                    oFrag.appendChild(oLi);
                }

                oUl.appendChild(oFrag);

                alert(new Date().getTime()-iStart);
            }
        }
    </script>
</head>
<body>
    <input type="button" id="btn1" value='普通'/>
    <ul id="ul1"></ul>
</body>
</html>

<!-- createDocumentFragment -->
View Code

BOM

1. window.open() 方法及相关参数
2. 运行代码框实例
3. document.write() 方法
4. about:blank 打开新窗口及返回值
5. close()关闭当前窗口及新开窗口特性
6. window.navigator.userAgent 检测浏览器版本
7. window.location 读写地址栏
8. 可社区尺寸、滚动距离
9. 系统对话框及返回值
10. 侧边栏广告实例
11. window.onscroll 事件及处理窗口变化等细节
12. 解决滚动条闪烁问题:固定定位与滑动效果
13. 返回顶部效果实例
14. 解决定时器与事件冲突的问题
<!-- 1. window.open() 方法及相关参数
window.open in BOM
window.onload is needed
http://www...  not www...
input label not button label
_self presentPage _blank newPage -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
    window.onload=function()
    {
      var oBtn=document.getElementById('id1');

      oBtn.onclick=function()
      {
        window.open('http://www.miaov.com','_self');
      }
    }
  </script>
</head>
<body>
    <input type="button" id="id1" value="open_window">
</body>
</html>


<!-- 2. 运行代码框实例 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
     window.onload=function()
     {
      var oTxt=document.getElementById('txt1');
      var oBtn=document.getElementById('btn1');

      oBtn.onclick=function()
      {
        var oNewWin=window.open('about:blank');
        
        document.write(oTxt.value);
      }
     }
  </script>
</head>
<body>
  <textarea name="" id="txt1" cols="40" rows="10"></textarea><br />
  <input type="button" id="btn1" value='运行'>
</body>
</html>

<!-- 6. window.navigator.userAgent 检测浏览器版本
7. window.location 读写地址栏
window.location
window.navigator.userAgent -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
    alert(window.navigator.userAgent);
    alert(window.location);
    window.location='http://www.miaov.com/';
  </script>
</head>
<body>
</body>
</html>
View Code
<!-- 侧边栏布局 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #div1 {width: 100px;height: 100px;background: red;position: fixed;right: 0;top: 50%;margin-top: -50px;}
  </style>
</head>
<body style='2000px'>
  <div id="div1"></div>
</body>
</html>

<!-- 侧边栏从顶端滚下来 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title id='title'>Document</title>
  <style>
    #div1 {width:100px;height: 100px;background: red;position: absolute;right: 0;top: 0;}
  </style>
  <script src='move.js'></script>
  <script>
    window.onresize=window.onload=window.onscroll=function()
    {
      var oDiv=document.getElementById('div1');
      var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
      document.getElementById('title').innerHTML=scrollTop+' cl'+document.documentElement.clientHeight+' of'+oDiv.offsetHeight;
      var t=(document.documentElement.clientHeight-oDiv.offsetHeight)/2

      //oDiv.style.top=scroll+t+'px';
      startMove(oDiv, {top:scrollTop+t});

       var b=confirm('Is it rainning today?');
   var str=prompt('Please enter your name', 'blue');
    }
  </script>
</head>
<body style='height:2000px;'>
  <div id="div1"></div>
</body>
</html>
View Code

js

/**
 * @author miaov
 */
function getStyle(obj, attr)
{
    if(obj.currentStyle)
    {
        return obj.currentStyle[attr];
    }
    else
    {
        return getComputedStyle(obj, false)[attr];
    }
}

function startMove(obj, json, fn)
{
    clearInterval(obj.timer);
    obj.timer=setInterval(function (){
        var bStop=true;        //这一次运动就结束了——所有的值都到达了
        for(var attr in json)
        {
            //1.取当前的值
            var iCur=0;
            
            if(attr=='opacity')
            {
                iCur=parseInt(parseFloat(getStyle(obj, attr))*100);
            }
            else
            {
                iCur=parseInt(getStyle(obj, attr));
            }
            
            //2.算速度
            var iSpeed=(json[attr]-iCur)/8;
            iSpeed=iSpeed>0?Math.ceil(iSpeed):Math.floor(iSpeed);
            
            //3.检测停止
            if(iCur!=json[attr])
            {
                bStop=false;
            }
            
            if(attr=='opacity')
            {
                obj.style.filter='alpha(opacity:'+(iCur+iSpeed)+')';
                obj.style.opacity=(iCur+iSpeed)/100;
            }
            else
            {
                obj.style[attr]=iCur+iSpeed+'px';
            }
        }
        
        if(bStop)
        {
            clearInterval(obj.timer);
            
            if(fn)
            {
                fn();
            }
        }
    }, 30)
}
View Code

功能:回到顶部按钮

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    #btn1 {position: fixed;bottom: 0;right: 0;}
  </style>
  <script>
    window.onload=function()
    {
      var oBtn=document.getElementById('btn1');
      var timer=null;
      var bSys=true;

      //用户拖动了滚动条?
      //移动的时候发生了滚动,用户在滚动就是第二次滚动
      window.onscroll=function()
      {
        if(!bSys){
          clearInterval(timer);
        }
        bSys=false;
      }

      //点击回到顶部,回到顶部之后关闭定时器
      oBtn.onclick=function()
      {
        timer=setInterval(function() 
        {
          var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
          var iSpeed=Math.floor(-scrollTop/8);

          if(scrollTop==0)
          {
            clearInterval(timer);
          }

          bSys=true;

          document.documentElement.scrollTop=document.body.scrollTop=scrollTop+iSpeed;
        }, 30)
      }
    }
  </script>
</head>
<body style='height:2000px;'>
  1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br />73<br />74<br />75<br />76<br />77<br />78<br />79<br />80<br />81<br />82<br />83<br />84<br />85<br />86<br />87<br />88<br />89<br />90<br />91<br />92<br />93<br />94<br />95<br />96<br />97<br />98<br />99<br />100<br />101<br />102<br />103<br />104<br />105<br />106<br />107<br />108<br />109<br />110<br />111<br />112<br />113<br />114<br />115<br />116<br />117<br />118<br />119<br />120<br />121<br />122<br />123<br />124<br />125<br />126<br />127<br />128<br />129<br />130<br />131<br />132<br />133<br />134<br />135<br />136<br />137<br />138<br />139<br />140<br />141<br />142<br />143<br />144<br />145<br />146<br />147<br />148<br />149<br />150<br />151<br />152<br />153<br />154<br />155<br />156<br />157<br />158<br />159<br />160<br />161<br />162<br />163<br />164<br />165<br />166<br />167<br />168<br />169<br />170<br />171<br />172<br />173<br />174<br />175<br />176<br />177<br />178<br />179<br />180<br />181<br />182<br />183<br />184<br />185<br />186<br />187<br />188<br />189<br />190<br />191<br />192<br />193<br />194<br />195<br />196<br />197<br />198<br />199<br />200<br />201<br />202<br />203<br />204<br />205<br />206<br />207<br />208<br />209<br />210<br />211<br />212<br />213<br />214<br />215<br />216<br />217<br />218<br />219<br />220<br />221<br />222<br />223<br />224<br />225<br />226<br />227<br />228<br />229<br />230<br />231<br />232<br />233<br />234<br />235<br />236<br />237<br />238<br />239<br />240<br />241<br />242<br />243<br />244<br />245<br />246<br />247<br />248<br />
    <input type="button" id="btn1" value="back_to_top">
</body>
</html>
View Code

 事件基础

事件基础(一)
1. 什么是事件对象
2. document对象范围
3. event事件对象、clientX、clientY
4. 事件对象的兼容性问题及解决方案
5. 事件冒泡原理
6. 取消事件冒泡:cancelBubble、弹出层实例
7. 跟随鼠标的DIV实例

事件基础(二)    
1. 可视区坐标
2. 滚动条所滚动的距离:scrollTop
3. 滚动条所滚动的距离——解决谷歌浏览器兼容性问题
4. 跟随鼠标的DIV实例——消除滚动条的影响
5. 一串跟随鼠标的DIV实例
    ——思考题:在鼠标不移动时,也能实现鼠标跟随
6. 键盘事件:onkeydown、keyCode
7. 用键盘来控制DIV移动实例
    ——思考题:如何消除不卡顿的DIV移动
8. 提交留言实例——ctrl+回车的提交方式
<!-- 1. 什么是事件对象
用来获取事件的详细信息:鼠标位置、键盘按键
例子:获取鼠标位置:clientX
document的本质:document.childNodes[0].tagName怎么理解?
FF:ev IE:event
获取鼠标位置:clientX
arguments.callee 在哪一个函数中运行,它就代表哪个函数
(function(n){
  if(n > 1)  return n* arguments.calle(n-1);
  return n;
})(10); -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<script>
  document.onclick=function(ev)
  {
    var oEvent=ev||event;

    alert(oEvent.clientX+', '+oEvent.clientY);
  }
</script>
<body>
  
</body>
</html>

<!-- 事件冒泡 事件捕获 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
</head>
<body>
  <div style='300px;height:300px;background:red;' onclick='alert(this.style.background)'>
    <div style='200px;height:200px;background:green;' onclick='alert(this.style.background)'>
      <div style='100px;height:100px;background:#ccc;' onclick='alert(this.style.background)'></div>
    </div>
  </div>
</body>
</html>

<!-- offset -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
#div1 { 100px;height: 100px;background: red;border: 1px solid black;padding: 10px;margin: 20px;position: absolute;left: 100px;top: 100px;}
</style>
  <script>
  window.onload=function()
  {
    var oDiv=document.getElementById('div1');

    alert(oDiv.offsetLeft);//m20+l100=120
  }
  </script>
</head>
<body>
   <div id="div1"></div>
</body>
</html>

<!-- keycode -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  document.onkeydown=function(ev)
  {
    var oEvent=ev||event;

    alert(oEvent.keyCode);
  }
  </script>
</head>
<body>
  
</body>
</html>

<!-- 可视区距离scrollTop -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
    document.onclick=function()
    {
      /*alert(document.documentElement.scrollTop);//非chrome
      alert(document.body.scrollTop);//chrome*/
      var scrollTop=document.documentElement.scrollTop||document.body.scrollTop;
    }
  </script>
</head>
<body>
</body>
</html>
View Code

 鼠标事件 键盘事件

<!-- 6. 取消事件冒泡:cancelBubble、弹出层实例
  oEvent.cancelBubble not cancelBuble -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  #div1 { 100px;height: 150px;background: #ccc;display: none;}
  </style>
  <script>
  window.onload=function()
  {
    var oBtn=document.getElementById('btn1');
    var oDiv=document.getElementById('div1');

    oBtn.onclick=function(ev)
    {
      var oEvent=ev||event;
      oDiv.style.display='block';
      alert('btn doing')
      oEvent.cancelBubble=true;
    }

    document.onclick=function()
    {
      oDiv.style.display='none';
      alert('page doing');
    }
  }
  </script>
</head>
<body>
  <input type="button" id="btn1" value="show">
  <div id="div1"></div>
</body>
</html>


<!-- 7. 用键盘来控制DIV移动实例
left只读,字符串‘8px’ offsetLeft读写,数字28
,js中通过style只能来操控行间元素。你要引用外部样式表中的属性,就不能通过style来取值
要想获取非行内样式可以试试下面的方法
function getStyle(obj, name)
{
if(obj.currentStyle)
{
return obj.currentStyle[name];//兼容ie版本
}
else
{
return getComputedStyle(obj, false)[name];//兼容FF和谷歌版本
}
}
window.onload=function ()
{
var oDiv=document.getElementById('div1');

alert(getStyle(oDiv, 'offsetLeft'));
};

<div id="div1">
</div> -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  #div1 { 100px;height: 100px;background: #ccc;position: absolute;}
  </style>
  <script>
    document.onkeydown=function(ev)
    {
      var oEvent=ev||event;
      var oDiv=document.getElementById('div1');

      // alert(oEvent.keyCode);//←37 →39
      if(oEvent.keyCode==37)
      {
        oDiv.style.left=oDiv.offsetLeft-10+'px';
      }
      else if(oEvent.keyCode==39)
      {
        oDiv.style.left=oDiv.offsetLeft+10+'px';
      }
    }
  </script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>
View Code

 跟随鼠标移动的div

<!--跟随鼠标移动的div 
  oEvent.clientX -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  #div1 { 100px;height: 100px;background: red;position: absolute;}
  </style>
  <script>
  document.onmousemove=function (ev)
  {
    var oEvent=ev||event;
    var oDiv=document.getElementById('div1');

    oDiv.style.left=oEvent.clientX+'px';
    oDiv.style.top=oEvent.clientY+'px';
  }
  </script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>

<!--跟随鼠标移动的div2  -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  #div1 { 100px;height: 100px;background: red;position: absolute;}
  </style>
  <script>
  document.onmousemove=function (ev)
  {
    var oEvent=ev||event;
    var oDiv=document.getElementById('div1');

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

    oDiv.style.left=oEvent.clientX+scrollLeft+'px';
    oDiv.style.top=oEvent.clientY+scrollTop+'px';
  }
  </script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>

<!-- 一串 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  div { 100px;height: 100px;background: red;position: absolute;}
  </style>
  <script>
  window.onload=function ()
  {
    var aDiv=document.getElementsByTagName('div');
    var i=0;

    document.onmousemove=function (ev)
   {
    var oEvent=ev||event;

    for(i=aDiv.length-1;i>0;i--)
    {
      aDiv[i].style.left=aDiv[i-1].style.left;
      aDiv[i].style.top=aDiv[i-1].style.top;
    }

    aDiv[0].style.left=oEvent.clientX+'px';
    aDiv[0].style.top=oEvent.clientY+'px';
   }
  }
  
  </script>
</head>
<body>
  <div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</body>
</html>
View Code

 ctrl+enter提交

<!-- 8. 提交留言实例——ctrl+回车的提交方式 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  window.onload=function()
  {
    var oBtn=document.getElementById('btn1');
    var oTxt1=document.getElementById('txt1');
    var oTxt2=document.getElementById('txt2');

    oBtn.onclick=function()
    {
      oTxt1.value+=oTxt2.value+'
';
      oTxt2.value='';
    };

    oTxt2.onkeydown=function (ev)
    {
      var oEvent=ev||event;

      if(oEvent.ctrlKey&&oEvent.keyCode==13)
      {
        oTxt1.value+=oTxt2.value+'
';
        oTxt2.value='';
      }
    }
  }
  </script>
</head>
<body>
  <textarea name="" id="txt1" cols="40" rows="10"></textarea>
  <input type="text" id="txt2">
  <input type="button" id="btn1" value="message">
</body>
</html>
View Code
事件中级    
1. 什么是事件的默认行为
2. 上下文菜单:oncontextmenu
3. 文本框内禁止输入内容实例
4. 自定义右键菜单实例
5. 只能输入数字的输入框实例:onkeydown、onkeyup
6. 拖拽实例:拖拽原理、三个事件、document范围、解决FF的bug
7. 限制拖拽范围的条件:document.documentElement.clientWidth
<!-- 2. 上下文菜单:oncontextmenu
      取消右键,not ontextmenu -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  document.oncontextmenu=function ()
  {
    return true;
  };
  </script>
</head>
<body>
  
</body>
</html>

<!-- 组织表单提交 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  window.onload=function ()
  {
    var oForm=document.getElementById('form1');

    oForm.onsubmit=function ()
    {
      return false;
    };
  }
  </script>
</head>
<body>
    <form action="http://www.miaov.com/" id="form1">
      <input type="submit">
    </form>
</body>
</html>

<!-- clientWidth -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  document.onclick=function ()
  {
    alert(document.documentElement.clientWidth);
  };
  </script>
</head>
<body>
  
</body>
</html>

<!-- 5. 只能输入数字的输入框实例:onkeydown、onkeyup -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  window.onload=function ()
  {
    var oTxt=document.getElementById('txt1');

    oTxt.onkeydown=function (ev)
    {
      var oEvent=ev||event;

      //0   48
      //9   57
      //退格  8
      if(oEvent.keyCode!=8 && (oEvent.keyCode<48 || oEvent.keyCode>57))
      {
        return false;
      }

    }
  }
  </script>
</head>
<body>
  <input type="text" id="txt1">
</body>
</html>

<!-- 5. 只能输入数字的输入框实例:onkeydown、onkeyup -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  document.oncontextmenu=function (ev)
  {
    var oEvent=ev||event;
    var oUl=document.getElementById('ul1');

    oUl.style.display='block';
    oUl.style.left=oEvent.clientX+'px';
    oUl.style.top=oEvent.clientY+'px';

    return false;
  }

  document.onclick=function ()
  {
    var oUl=document.getElementById('ul1');

    oUl.style.display='none';
  }
  </script>
</head>
<body>
  <ul id="ul1" style='position: absolute;'>
    <li>登陆</li>
    <li>回到首页</li>
    <li>注销</li>
    <li>加入VIP</li>
  </ul>
</body>
</html>
View Code

 拖拽

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
  #div1 { 100px;height: 100px;background: red;position: absolute;}
  </style>
  <script>
  window.onload=function ()
  {
    var oDiv=document.getElementById('div1');

    var disX=0;
    var disY=0;

    oDiv.onmousedown=function (ev)
    {
      var oEvent=ev||event;

      disX=oEvent.clientX-oDiv.offsetLeft;
      disY=oEvent.clientY-oDiv.offsetTop;

      oDiv.onmousemove=function (ev)
      {
        var oEvent=ev||event;
        var l=oEvent.clientX-disX;
        var t=oEvent.clientY-disY;

        if(l<0)
        {
          l=0;
        }
        else if(l>document.documentElement.clientWidth-oDiv.offsetWidth)
        {
          l=document.documentElement.clientWidth-oDiv.offsetWidth;
        }

        if(t<0)
        {
          t=0;
        }
        else if(t>document.documentElement.clientHeight-oDiv.offsetHeight)
        {
          t=document.documentElement.clientHeight-oDiv.offsetHeight;
        }

        oDiv.style.left=l+'px';
        oDiv.style.top=t+'px';
      }

      oDiv.onmouseup=function ()
      {
        oDiv.onmousemove=null;
        oDiv.onmouseup=null;
      }

      return false;
    }


  }
  </script>
</head>
<body>
  <input id='div1'>
</body>
</html>
View Code

 cookie

1. 什么是 cookie、cookie 特性
2. js 中的 cookie:设置 document.cookie
3. cookie 不会覆盖
4. cookie 过期时间:expires、setDate
5. 封装设置 cookie 函数
6. 封装获取 cookie 函数
7. 封装删除 cookie 函数
8. cookie 接合拖拽实例
9. cookie 记录用户名实例

 记录用户名

<!-- 4. cookie 过期时间:expires、setDate
cookie是用'; '不是';'隔开的
  setCookie、getCookie、removeCookie
  cookie一个一个添加,每个单独添加期限 -->
<!doctype html>
<html>
  <head>
    <title>无标题文档</title>
    <script>
    function setCookie(name, value, iDay)
    {
      var oDate=new Date();
      oDate.setDate(oDate.getDate()+iDay);

      document.cookie=name+'='+value+';expires='+oDate;
    }

    function getCookie(name)
    {
      //'username=abc; password=123456;'
      alert(document.cookie)
      var arr=document.cookie.split('; ');

      //match
      for(var i=0;i<arr.length;i++)
      {
        var arr2=arr[i].split('=');

        if(arr2[0]==name)
        {
          return arr2[1];
        }
      }

      //no match
      return '';
    }

    function removeCookie(name)
    {
      setCookie(name,'1',-1);
    }

    setCookie('username', 'abc', 30);
    setCookie('password', '123456', 300);
    setCookie('aaa', '123', 300);
    alert(getCookie('username'));
    removeCookie('username');
    alert(getCookie('username'));

/*    var oDate=new Date();

    oDate.setDate(oDate.getDate()+30);

    document.cookie='user=tab;expires='+oDate;
    document.cookie='pass=123';
    alert(document.cookie);*/
    </script>
  </head>
  <body>
    
  </body>
</html>
View Code

 结合拖拽

<!-- cookie結合拖拽 -->
<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <script>
  function setCookie(name, value, iDay)
  {
    var oDate=new Date();

    oDate.setDate(oDate.getDate()+iDay);

    document.cookie=name+'='+value+';expires='+oDate;
  }

  function getCookie(name)
  {
    var arr=document.cookie.split('; ');

    //found
    for(var i=0;i<arr.length;i++)
    {
      var arr2=arr[i].split('=');

      if(arr2[0]==name)
      {
        return arr2[1];
      }
    }

    //not found
    return '';
  }

  function removeCookie(name)
  {
    setCookie(name, '1', -1);
  }

  window.onload=function()
  {
    var oDiv=document.getElementById('div1');

    oDiv.onmousedown=function(ev)
    {
      var oEvent=ev||event;

      var disX=oEvent.clientX-oDiv.offsetLeft;
      var disY=oEvent.clientY-oDiv.offsetTop;

      document.onmousemove=function(ev)
      {
        oDiv.style.left=oEvent.clientX-disX+'px';
        oDiv.style.top=oEvent.clientY-disY+'px';
      }

      document.onmouseup=function()
      {
         document.onmousemove=null;
         document.onmouseup=null;

         setCookie('x', oDiv.offsetLeft, 5);
         setCookie('y', oDiv.offsetTop, 5);
      }

      return false;
    }
  }
  </script>
</head>
<body>
  <div id="div1"></div>
</body>
</html>
View Code
原文地址:https://www.cnblogs.com/tabCtrlShift/p/5625454.html