• javascript事件相关3


      1 键盘事件 和 文本事件
      2 一 键盘事件: 当用户在键盘上敲击的时候 就会触发键盘事件,DOM0级规定了键盘事件,DOM3级又重新规范了键盘事件。 DOM2级 本来是有键盘事件 不过听说再定稿以前又删除了相关内容,所以目前为止 也是靠着DOM0级的键盘事件在操作, 因为 DOM3级的键盘事件各浏览器支持程度 差异比较大 要做跨浏览器开发 实属不易,所以 最可靠的,还是DOM0级的键盘事件了。
      3 
      4 DOM0级 有三个键盘事件:
      5 1.keydown   鼠标按下那一瞬间触发
      6 2.keypress  鼠标按下字符键或者说能够影响到 文本内容显示的键的那一瞬间触发
      7 3.keyup     鼠标抬起那一瞬间触发
      8 
      9 当用户 按住任意一个键不放的时候 会重复触发 keydown 和 keypress事件
     10 当用户 按住一个字符键或者说能够影响到 文本内容显示的键不放的时候 会重复触发 keypress事件
     11 
     12 键盘事件用 也支持:shiftkey, ctrlkey, altkey, meatkey的判断。 IE不支持 meatkey
     13 
     14 键码:
     15 当发生 keydown keyup事件时 event事件对象中 包含一个keyCode属性 这个属性中保存了与键盘上特定的键对应的值。
     16 如果按下的是 数字或者字符时 此时的 keyCode中 包含的是一个与之对应的 ASCII码。
     17 DOM 和 IE 都支持这个属性
     18 
     19 键盘的每个键码 可以在google
     20 
     21 不过这里有个例外 :就是当在键盘上按下 分号“;”时  此时不同的浏览器 keyCode值不一样。
     22 在 IE, Safari,Chrome中 keyCode :186
     23 在 Opera, FF中 keyCode: 59
     24 
     25 字符编码:
     26 charCode属性
     27 此属性只有在触发keypress事件时才会有这个属性,这个属性的值保存的是按下这个键的 ASCII码。
     28 支持这个属性的浏览器有:IE9,Safari,Chrome,FF
     29 而IE6, IE7, IE8 和 Opear 中 是保存在 keyCode中的,所以可以写成一个 兼容性的函数。
     30 
     31 if (typeof event.charCode == "number") {
     32     return event.charCode;
     33 } else {
     34     return event.keyCode
     35 }
     36 
     37 DOM3级中的属性变化:
     38 DOM3级中 已经不再包含 charCode属性了 新增了下面两个属性
     39 1. key    为了取代keyCode的 包含的值是 一个字符串 。用户在键盘上按下的什么键 key里面就保存的相应的字符串。
     40    当用户 按下字符 S 时 就保存的 "S" 当用户按下 shift 键时 就保存的 "shift"
     41 
     42 2. char   当按下字符时保存的值与 key 相同, 当按下非字符时保存的值是 null 43 
     44 因为 Safari 5 和 Chrome支持的是 keyIdentifier属性 
     45 
     46 所以这三个属性的兼容性 差别太大,不建议在跨浏览器开发中使用哈!!!
     47 
     48 还有键盘事件对象中的 location属性可以判断出用户是在键盘的哪个位置 或者 不同设备 或者 虚拟键盘上触发的键盘事件。
     49 但是因为 兼容性太差 也不建议大家在 跨浏览器的开发中使用哈!!!
     50 
     51 文本事件:ie9+ Safari 和 Chrome支持
     52 
     53 textInput 是DOM3级中的一个新增事件
     54 这个事件主要是用来 替代keypress事件的,区别在于:
     55 1. 在可编辑的区域中输入字符时才会触发这个事件,
     56 2. 在输入实际的字符时才会触发这个事件。
     57 
     58 由于这个事件主要考虑的 就是输入字符的时候触发, 所以事件对象中有个 data 属性专门用来保存 用户输入的字符的 字符串。
     59 例如: 
     60 1. 当用户输入的是 大写的 "S" , 那么data中就保存的是 大写的 "S",
     61 2. 当用户输入的是 小写的 "s" , 那么data中就保存的是 小写的 "s".
     62 
     63 此事件对象中 还有一个 inputMethod属性 保存的是数值,不同的数值 代表用户是以不同的方式 输入的文本,
     64 比如 粘贴,拖拽......等等。
     65 
     66 但是由于兼容性太差 也不建议大家跨浏览器开发。
     67 
     68 复合事件:是DOM3级中新增的一类事件用来处理 IME输入序列的
     69 IME可以输入在物理键盘上 找不到的字符哦....通常需要同时按住 多个字符键,但是同时只能输入一个字符哈!!!
     70 有以下三种 复合事件:
     71 
     72 1. compositionstart     表示要开始输入了之前触发
     73 
     74 2. compositionupdate    表示在输入字段中插入新的字符时触发
     75 
     76 3. compositionend       表示输入完毕时触发
     77 
     78 当触发这三个事件时  事件对象中 包含一个 data 属性里面保存着 事件发生时候的输入值。
     79 
     80 悲剧的是 ie9+ 是唯一支持 复合事件的浏览器 所以 GG 了。跨浏览器还是别用了吧
     81 
     82 最后来看一个 变动事件吧:
     83 这个事件是 DOM2级的事件
     84 定义了 以下几个属性了:
     85 
     86 1. DOMSubtreeModified
     87 2. DOMNodeRemoved
     88 3. DOMNodeInserted
     89 4. DOMNodeInsertedIntoDocument  不会冒泡的事件
     90 5. DOMNodeRemovedFromDocument   不会冒泡的事件
     91 6. DOMAttrModified
     92 7. DOMCharacterDataModified
     93 
     94 可以通过 dicument.implementation.hasFeature("MutationEvents", "2.0") 方法来判断 浏览器是不是支持这个 变动事件。
     95 
     96 当我们通过 removeChild, replaceChild 这两个方法删除节点的时候
     97 会在节点被删除以前先触发以下事件触发:
     98 
     99 1.DOMNodeRemoved
    100 2.DOMNodeRemovedFromDocument 不会冒泡的事件
    101 3.DOMSubtreeModified
    102 
    103 当我们通过 appendChild, replaceChild, insetBefore 这三个方法添加/替换节点的时候
    104 会在节点被添加以后触发以下事件触发:
    105 
    106 1.DOMNodeInserted
    107 2.DOMNodeInsertedIntoDocument 不会冒泡的事件
    108 3.DOMSubtreeModified
    109 
    110 除了ie9+以外 所有现代浏览器都支持这三个变动事件
    111 1. DOMSubtreeModified
    112 2. DOMNodeRemoved
    113 3. DOMNodeInserted
    114 
    115 其余暂不考虑!!!!!
    116 
    117 今天就到这里了! 由于最近也在读zepto的源码 所以精力实在有限 ,不详细的地方,只有自己查漏补缺了 也欢迎指出来!不胜感激。
    118 当然 写写的这些笔记 都只是为了让自己的所学能够留下点印记而已 ,愿大家一起进步!!!!
    119 
    120 晚安
  • 相关阅读:
    扩大可点击区域
    CSS 选中奇偶子元素
    homebrew 常用命令
    移动端半像素 0.5PX 边框实现。
    node-sass环境
    jq插件的编写方法(自定义jq插件)---转
    面向对象的三个基本特征
    Java中数据类型转换
    Java 8种基础数据类型
    Java中数据类型转换
  • 原文地址:https://www.cnblogs.com/hfdj/p/7658997.html
Copyright © 2020-2023  润新知