• JS基础(二)


    21、标准事件模型的事件类型(包括4个子模块)

    • HTMLEvents:接口为Event,支持的事件类型包括abort、blur、change、error、focus、load、resize、scroll、select、submit、unload
    • MouseEvents:接口为MouseEvent,支持的事件类型包括click、mousedown、mouseup、mousemove、mouseout、mouseover
    • UIEvents:接口为UIEvent
    • MutationEvents:接口为MutationEvent
    事件类型 触发时机 接口 冒泡 默认动作 支持元素
    abort 图像加载时中断 Event Y N img、object
    blur 元素失去焦点 Event N N a、area、button、input、label
    change 用户改变域的内容 Event  Y N input、select、textarea
    click 鼠标单击某个对象 MouseEvent Y Y 大部分元素
    error 当加载文档或图像时发生某个错误 Event Y N body、frameset、iframe、img、object
    focus 元素获得焦点 Event N N a、area、button、imput、label、select、textarea
    load 文档或图像加载完毕 Event N N body、frameset、iframe、img、object
    mousedown 某个鼠标按键被按下 MouseEvent Y Y 大部分元素
    mousemove 鼠标被移动 MouseEvent Y Y 大部分元素
    mouseout 鼠标从某元素移开

    MouseEvent

    Y Y 大部分元素
    mouseover 鼠标被移到某元素之上 MouseEvent Y Y 大部分元素
    mouseup 某个鼠标按键被松开 MouseEvent Y Y 大部分元素
    reset 表单被重置 Event Y N form
    resize 窗口或框架被调整尺寸 Event Y N body、iframe、frameset
    scroll 窗口滚动条滚动 Event Y N body
    select 文本被选定 Event Y N input、textarea
    submit 表单被提交 Event Y Y form
    unload 写在文档、框架集或图像 Event N N body、frameset、iframe、img、object

    22、Event对象

    标准事件模型   意义   备注 IE事件模型
    type 获取事件的类型,如click、mouseout type 相同
    target 发生事件的节点,一般利用该属性来获取当前被激活事件的具体对象 srcElement event=window.srcElement
    currentTarget 事件当前传播到的节点。如果在传播过程的捕获阶段或冒泡阶段处理事件,这个属性的值就与target属性值不同 offsetX、offsetY IE专有属性,声明事件发生时鼠标指针相对于源元素左上角的x轴和y轴坐标值,标准事件模型中没有对应的值
    eventPhase 显示当前所处的事件传播过程的阶段    
    timeStamp 事件发生的事件    
    bubbles 显示事件是否能够在文档中冒泡    
    cancelable 显示事件是否能够取消默认动作    
    stopPropagation() 组织当前事件从正在处理它的节点传播 cancelBubble 为true时等用于stopPropagation()方法,默认false
    preventDefault() 阻止默认动作的执行 returnValue 为false时等同于preventDefault()方法,默认true
    button 当在声明mousedown、mouseup和click事件时,显示鼠标键的状态值。0表示左键,1表示中间键,2表示右键 button 键值不同,1表示左键、2表示右键、4表示中间键,可以组合使用,如1+2=3,则3表示同时按下左右键
    aktKey、ctrlKey、metaKey、ShiftKey

    表示在声明鼠标事件时,是否按下了Alt键、Ctrl键、Meta键和Shift键

    aktKey、ctrlKey、ShiftKey 意义相同但没有ShiftKey属性
    clientX、clientY 声明事件发生时鼠标指针相对于客户区浏览器窗口左上角的x轴和y轴的坐标值

    clientX、clientY

    相同
    screenX、screenY 声明事件发生时鼠标指针相对于用户显示器左上角的x轴和y轴的坐标值    
    relatedTarget 引用与事件的目标节点相关的节点。对与mouseover事件,它是鼠标移到目标是所离开的那个节点;对于mouseout事件,它是鼠标离开目标是将要进入的那个节点 fromElement、toElement 相同

    23、

      1设计鼠标拖放操作

     <script>
      2 // 初始化拖放对象
      3 var box = document.getElementById("box");
      4     // 获取页面中被拖放元素的引用指针
      5 box.style.position = "absolute";            // 绝对定位
      6 // 初始化变量,标准化事件对象
      7 var mx, my, ox, oy;                         // 定义备用变量
      8 function e(event){                             // 定义事件对象标准化函数
      9    if( ! event){                             // 兼容IE浏览器
     10       event = window.event;
     11       event.target = event.srcElement;
     12       event.layerX = event.offsetX;
     13       event.layerY = event.offsetY;
     14    }
     15    event.mx = event.pageX || event.clientX + document.body.scrollLeft; 
     16     // 计算鼠标指针的x轴距离
     17    event.my = event.pageY || event.clientY + document.body.scrollTop; 
     18     // 计算鼠标指针的y轴距离
     19    return event;                             // 返回标准化的事件对象
     20 }
     21 // 定义鼠标事件处理函数
     22 document.onmousedown = function(event){     // 按下鼠标时,初始化处理
     23    event = e(event);                         // 获取标准事件对象
     24    o = event.target;                         // 获取当前拖放的元素
     25    ox = parseInt(o.offsetLeft);             // 拖放元素的x轴坐标
     26    oy = parseInt(o.offsetTop);                 // 拖放元素的y轴坐标
     27    mx = event.mx;                             // 按下鼠标指针的x轴坐标
     28    my = event.my;                             // 按下鼠标指针的y轴坐标
     29    document.onmousemove = move;             // 注册鼠标移动事件处理函数
     30    document.onmouseup = stop;                 // 注册松开鼠标事件处理函数
     31 }
     32 function move(event){                         // 鼠标移动处理函数
     33    event = e(event);
     34    o.style.left = ox + event.mx - mx  + "px";    // 定义拖动元素的x轴距离
     35    o.style.top = oy + event.my - my + "px";    // 定义拖动元素的y轴距离
     36 }
     37 function stop(event){                             // 松开鼠标处理函数
     38    event = e(event);
     39    ox = parseInt(o.offsetLeft);                 // 记录拖放元素的x轴坐标
     40    oy = parseInt(o.offsetTop);                     // 记录拖放元素的y轴坐标
     41    mx = event.mx ;                                 // 记录鼠标指针的x轴坐标
     42    my = event.my ;                                 // 记录鼠标指针的y轴坐标
     43    o = document.onmousemove = document.onmouseup = null; 
     44     // 释放所有操作对象
     45 }
     46 </script>
     47

    设计鼠标跟随特效

     48 <script>
     49 var pos = function(o, x, y,event){     // 鼠标定位函数
     50     var posX = 0, posY = 0;             // 临时变量值
     51     var e = event || window.event;         // 标准化事件对象
     52     if(e.pageX || e.pageY){             // 获取鼠标指针的当前坐标值
     53         posX = e.pageX;
     54         posY = e.pageY;
     55     }
     56     else if(e.clientX || e.clientY){
     57         posX = e.clientX + document.documentElement.scrollLeft + 
     58 document.body.scrollLeft;
     59         posY = e.clientY + document.documentElement.scrollTop + 
     60 document.body.scrollTop;
     61     }
     62     o.style.position = "absolute";        // 定义当前对象为绝对定位
     63     o.style.top = (posY + y) + "px";
     64     // 用鼠标指针的y轴坐标和传入偏移值设置对象y轴坐标
     65     o.style.left = (posX + x) + "px";
     66     // 用鼠标指针的x轴坐标和传入偏移值设置对象x轴坐标
     67 }
     68 </script>
     69 </head>
     70 <body>
     71 <div id="div1">跟随鼠标的文字</div>
     72 <script language="javascript" type="text/javascript">
     73 var div1 = document.getElementById("div1");
     74 document.onmousemove = function(event){
     75     pos(div1, 10, 20,event);
     76 }
     77 </script>
     78

    跟踪鼠标在对象内相对位置

     79 <script>
     80 window.onload = function(){
     81     var  t = document.getElementById("text");
     82     var box = document.getElementById("box");
     83     box.onmousemove = function(event){
     84         var event = event || window.event;         // 标准化事件对象
     85         if(event.offsetX || event.offsetY ){
     86             t.value ="x:" + parseInt(event.offsetX) + "
    y:" + parseInt(event.offsetY);
     87         }
     88         else if(event.layerX || event.layerY ){
     89             t.value ="x:" + parseInt(event.layerX - 1) + "
    y:" + parseInt(event.layerY -1) ;
     90         }
     91     }
     92 }
     93 </script>
     94 </head>
     95 <body>
     96 <textarea  id ="text"></textarea>
     97 <div id="wrap">
     98     <span>
     99         <div id="box"></div>
    100     </span>
    101 </div>
    102 </body>
    103

    设计推箱子游戏

    104 <script>
    105 function keyDown(event){                     // 方向键控制元素移动函数
    106     var event = event || window.event;         // 标准化事件对象
    107     switch(event.keyCode){                 // 获取当前按下键盘键的编码
    108         case 37 :                         // 按下左箭头键,向左移动42个像素
    109             box.style.left = box.offsetLeft - 42  + "px";
    110             break;
    111         case 39 :                         // 按下右箭头键,向右移动42个像素
    112             box.style.left = box.offsetLeft + 42 + "px";
    113             break;
    114         case 38 :                         // 按下上箭头键,向上移动42个像素
    115             box.style.top = box.offsetTop  - 42 + "px";
    116             break;
    117         case 40 :                         // 按下下箭头键,向下移动42个像素
    118             box.style.top = box.offsetTop  + 42 + "px";
    119             break;
    120     }
    121     return false
    122 }
    123 window.onload = function(){
    124     var box = document.getElementById("box");    // 获取页面元素的引用指针
    125     box.style.position = "absolute";            // 色块绝对定位
    126     document.onkeydown = keyDown;     // 在Document对象中注册keyDown事件处理函数
    127 }
    128 </script>
    129 </head>
    130 <body>
    131 <div id="wrap">
    132     <div id="box"><img src="images/box.png" /></div>
    133 </div>
    134 </body>
    135

    自动读取选择文本

    136 <script>
    137 window.onload = function(){
    138     var a = document.getElementsByTagName("input")[0]; 
    139     // 获取第一个文本框的引用指针
    140     var b = document.getElementsByTagName("input")[1]; 
    141         // 获取第二个文本框的引用指针
    142     a.onselect = function(){        // 为第一个文本框绑定select事件处理函数
    143         if (document.selection){     // 兼容IE
    144             o = document.selection.createRange();    // 创建一个选择区域
    145             if(o.text.length > 0)     // 如果选择区域内存在文本
    146             b.value = o.text;         // 则把该区域内的文本赋值给第二个文本框
    147         }else{                        // 兼容DOM
    148             p1 = a.selectionStart;     // 获取文本框中选择的初始位置
    149             p2 = a.selectionEnd;     // 获取文本框中选择的结束位置
    150             b.value = a.value.substring(p1, p2); 
    151             // 截取文本框中被选取的文本字符串,然后赋值给第二个文本框
    152         }
    153     }
    154 }
    155 </script>
    156

    设计满屏画布背景

    157 <script>
    158 function w(){                    // 获取窗口宽度
    159     if (window.innerWidth)         // 兼容DOM
    160         return window.innerWidth;
    161     else if ((document.body) && (document.body.clientWidth)) 
    162     // 兼容IE
    163         return document.body.clientWidth;
    164 }
    165 function h(){                    // 获取窗口高度
    166     if (window.innerHeight)     // 兼容DOM
    167         return window.innerHeight;
    168     else if ((document.body) && (document.body.clientHeight)) 
    169     // 兼容IE
    170         return document.body.clientHeight;
    171 }
    172 window.onresize = function(){    // 注册resize事件处理函数,动态调整盒子大小
    173     box.style.width = w()  + "px";
    174     box.style.height = h()  + "px";
    175 }
    176 window.onload = function(){
    177     var box = document.getElementById("box");        // 获取盒子的引用指针
    178     box.style.position = "absolute";                // 绝对定位
    179     box.style.zIndx = -1;
    180     box.style.backgroundColor = "red";        // 背景色
    181     box.style.width = w()  + "px";    // 设置盒子宽度为窗口宽度的0.8倍
    182     box.style.height = h()  + "px";    // 设置盒子高度为窗口高度的0.8倍
    183 }
    184 </script>
    185

    设计自动跳转下拉菜单

    186 <script>
    187 window.onload = function(){
    188     var a = document.getElementsByTagName("select")[0];
    189     a.onchange = function(){
    190        window.open(this.value,"");         // 根据下拉列表框的当前值打开指定的网址
    191     }
    192 }
    193 </script>
    194 </head>
    195 <body>
    196 <select>
    197     <option value="#">请选择网站</option>
    198     <option value="http://www.baidu.com/">百度</option>
    199      <option value="http://www.google.cn/">Google</option>
    200 </select>
    201 </body>
    202

    禁止表单提交

    203 <script>
    204 window.onload = function(){
    205     var t = document.getElementsByTagName("input")[0]; 
    206     // 获取文本框的引用指针
    207     var f = document.getElementsByTagName("form")[0];
    208      // 获取表单的引用指针
    209     f.onsubmit = function(e){             // 在表单元素上注册submit事件处理函数
    210         alert(t.value);
    211         return false;                     // 禁止提交数据到服务器
    212     }
    213 }
    214 </script>
    215 </head>
    216 <body>
    217 <form id="form1" name="form1" method="post" action="">
    218     <input type="text" name="t" id="t" />
    219     <input name="" type="submit" />
    220 </form>
    221 </body>

     24、Tab面板交互式设计

      1 <script language="javascript" type="text/javascript">
      2 function hover(n, counter)
      3 {
      4     var $ = function(o)
      5     {
      6         return document.getElementById(o);
      7     }
      8     for(var i = 1; i <= counter; i ++ )
      9     {
     10         $('tab_' + i).className = 'normal';
     11         $('content_' + i).className = 'none';
     12     }
     13     $('content_' + n).className = 'show';
     14     $('tab_' + n).className = 'hover';
     15 }
     16 </script>
     17 </head>
     18 <body>
     19 <div class="tab_wrap">
     20     <ul class="tab">
     21         <li id="tab_1" class="hover" onMouseOver="hover(1,3);">Tab1</li>
     22         <li id="tab_2" class="normal" onMouseOver="hover(2,3);">Tab2</li>
     23         <li id="tab_3" class="normal" onMouseOver="hover(3,3);">Tab3</li>
     24     </ul>
     25     <div class="content">
     26         <div id="content_1" class="show"><img src="images/1.jpg" width="200" alt="图片"></div>
     27         <div id="content_2" class="none"><img src="images/4.jpg" width="300" alt="图片"></div>
     28         <div id="content_3" class="none"><img src="images/3.jpg" width="400" alt="图片"></div>
     29     </div>
     30 </div>
     31 </body>
     32

    HTML和js分离

     33 <script>
     34 function hover(){ 
     35 } 
     36 hover.prototype = { 
     37     ok : function(tabs,contents,openClass,closeClass){ 
     38         var _this = this; 
     39         if(tabs.length != contents.length) 
     40         { 
     41             alert("菜单项数量和内容包含框数量不一致!"); 
     42             return false; 
     43         }                 
     44         for(var i = 0 ; i < tabs.length ; i++) 
     45         {     
     46             _this.$(tabs[i]).value = i;                 
     47             _this.$(tabs[i]).onmouseover = function(){ 
     48                      
     49                 for(var j = 0 ; j < tabs.length ; j++) 
     50                 {                         
     51                     _this.$(tabs[j]).className = closeClass; 
     52                     _this.$(contents[j]).style.display = "none"; 
     53                 } 
     54                 _this.$(tabs[this.value]).className = openClass;     
     55                 _this.$(contents[this.value]).style.display = "block";                 
     56             } 
     57         } 
     58         }, 
     59     $ : function(o){ 
     60         if(typeof(o) == "string") 
     61         return document.getElementById(o); 
     62         return o; 
     63     } 
     64 } 
     65 window.onload = function(){ 
     66     var demo1 = new hover(); 
     67     demo1.ok(["tab_1","tab_2","tab_3"],["content_1","content_2","content_3"],"hover","normal"); 
     68 } 
     69 </script>
     70 </head>
     71 <body>
     72 <div class="tab_wrap">
     73     <ul class="tab">
     74         <li id="tab_1" class="hover">Tab1</li>
     75         <li id="tab_2" class="normal">Tab2</li>
     76         <li id="tab_3" class="normal">Tab3</li>
     77     </ul>
     78     <div class="content">
     79         <div id="content_1" class="show"><img src="images/1.jpg" width=200 alt="图片" /></div>
     80         <div id="content_2" class="none"><img src="images/4.jpg" width=300 alt="图片" /></div>
     81         <div id="content_3" class="none"><img src="images/3.jpg" width=400 alt="图片" /></div>
     82     </div>
     83 </div>
     84 </body>
     85

    标准化Tab交互行为

     86 <script>
     87 function hover(event){
     88     var $ = function(o){ 
     89         if(typeof(o) == "string") 
     90         return document.getElementById(o); 
     91         return o; 
     92     }
     93     var tab = $("tab").getElementsByTagName("li");
     94     var content = $("content").getElementsByTagName("div");
     95     var check=function(tab, o) {
     96         if(document.addEventListener){
     97             return tab.addEventListener("mouseover", o, true);
     98         }
     99         else if(document.attachEvent){
    100             return tab.attachEvent("onmouseover", o);
    101         }
    102     }
    103     ;
    104     for(var i = 0; i < tab.length; i ++ )
    105     {
    106         (function(j){
    107             check(tab[j], function(){
    108                 for(var n = 0; n < tab.length; n ++ )
    109                 {
    110                     tab[n].className = "normal";
    111                     content[n].className = "none";
    112                 }
    113                 tab[j].className = "hover";
    114                 content[j].className = "show";
    115             }
    116             );
    117         }
    118         )(i);
    119     }
    120 }
    121 window.onload = function()
    122 {
    123     hover();
    124 }
    125 </script>
    126 </head>
    127 <body>
    128 <div class="tab_wrap">
    129     <ul class="tab" id="tab">
    130         <li id="tab_1" class="hover">Tab1</li>
    131         <li id="tab_2" class="normal">Tab2</li>
    132         <li id="tab_3" class="normal">Tab3</li>
    133     </ul>
    134     <div class="content" id="content">
    135         <div id="content_1" class="show"><img src="images/1.jpg" width=200 alt="图片" /></div>
    136         <div id="content_2" class="none"><img src="images/4.jpg" width=300 alt="图片" /></div>
    137         <div id="content_3" class="none"><img src="images/3.jpg" width=400 alt="图片" /></div>
    138     </div>
    139 </div>
    140 </body>
  • 相关阅读:
    unrecognized selector sent to class
    Xcode 7安装KSImageNamed 不启作用
    使用IntelliJ IDEA配置Erlang开发环境
    BN 详解和使用Tensorflow实现(参数理解)
    argparse 在深度学习中的应用
    转置卷积的详细理解
    递归该怎么写(二)
    递归该怎么写(一)
    二叉树的遍历python 代码
    经典排序的python实现
  • 原文地址:https://www.cnblogs.com/agasha/p/9992040.html
Copyright © 2020-2023  润新知