• JS学习随手笔记


    • ===================字符串=====================
    • 字符串中间的空格也是要算长度的。
    • 每一个字符都可以返回对应的Unicode 编码
    • 文字的简单加密都是通过charCodeAt()方法得到 Unicode 编码(一个数字), 再减掉一定的值,最后用fromCharCode()方法将前者转为字符,就完成了加密。
    • 字符串之间比较大小,先比较第一位的  Unicode 编码 大小!
    • split()切割字符串会把他们放进一个数组。
    • 用字符串的方法可以完成一个查找并替换文本的功能。
    • 字符串的长度 不能设置!! 只能读取!
    • 颠倒字符串 先将字符串 切割成数组,用数组的颠倒方法 ,最后将 数组 转换成字符串就好。
    • ===================JSON和数组=====================
    • json的格式   var json = {'name':'leoo','age':29};
    • 读取:  json .name            json['name']
    • 设置:  json .name = '李旺'      json['name'] = '李旺' 
    • json 中可以包数组    var json = {'name':[1,2,3,5]};
    • 数组中包json    var arr= [ {'name':[1,2,3,5]}, {'name':[1,2,3,5]}]; 
    • 用下标可以很方便的读取 设置值。。。
    • 遍历json    使用 for( var attr in json){  alert(attr);  //得到的是所有的json 的 键  
    •  alert(json[attr]);  //得到所有的json的每一个键的值。  }
    • json 没有长度属性
    • 数组 和 对象 也可以用 for in 来遍历
    • 快速清空一个数组的内容可以用  arr.leng = 0
    • push() 和 unshift()方法返回一个数组新的长度值,   unshift()返回值IE67不支持。
    • pop() 和 shift() 方法分别删除数组最后一个  和  第一个 值, 并返回删除的值。
    • splice()方法可以删除   替换   增加  数组值操作, 返回值是被删除的值, 如果没有删除,返回值就是空!
    • sort()方法默认是将数组的每一个值变成字符串后进行比较。 如果要进行数组 的数字比较,可以在sort()中传递一个函数,列如:
      1 var arr2 =[4,3,8,78,92,5];
      2 arr2.sort(function(a , b){
      3    return a-b;  //   a - b 如果大于 是正数  ,a 和 b调换位置,负数 和 0,则/                  //不动  =》  从小到大的排序       b - a 则是从大到小排序。
      4 })
      //还有很多其他的 排序方法 : 希尔 、 快速 等等。。。

      随机排序, 使用 return Math.random()-0.5; 原理是一会 交换位置, 一会不交换位置,实现随机排序。

    • 随机数0-1  Math.round(Math.random())
    • 随机数0-10  Math.round(Math.random()*10)
    • 随机数5-10  Math.round(Math.random()*5+5)
    • 随机数公式 x - y   Math.round(Math.random()*(y-x)+x)
    • 随机数公式 0 - x   Math.round(Math.random()*x)
    • 随机数公式 1 - x   Math.ceil(Math.random()*x)
    • ===================Dom=====================
    • 元素的子节点 用  元素.children 属性,不用 childNodes 会包含文本节点!!
    • 元素第一个子节点 元素.firstElementChild   IE 6  7 8  用firstChild  但是,当元素没有元素子节点 而有文本节点的时候,会报错,  所以,推荐使用  children[0] 找第一个元素子节点
    • 操作兄弟节点和操作子节点需要注意文本节点的问题。
    • 父节点  parentNode   只有一个,不是集合         offsetParent 得到向上查找第一个有定位父节点   IE7以下,如果当前元素没有定位,默认是body,有则是html  。标准浏览器 IE8都是body。  IE 7及 以下,如果 haslayout被触发,则会指向这个元素 。
    • 获取指定元素的指定属性值 obj.getAttribute('value');  设置属性 obj.setAttribute(attr,value);     删除指定属性  obj.removeAttribute(attr); 
    • ie6 7 8下自定义的元素属性可以用  obj.name  obj[name]形式取得。 
    • ================BOM=======================
    • •可视区尺寸
      –document.documentElement.clientWidth
      –document.documentElement.clientHeight
      •滚动距离
      –document.body.scrollTop/scrollLeft
      –document.documentElement.scrollTop/scrollLeft
      •内容高度
      –document.body.scrollHeight
      •文档高度
      –document.documentElement.offsetHeight
      –document.body.offsetHeight
    • ================BOM=======================
    • 事件对象兼容的写法  var ev = ev || window.event;
    • onmousemove  是在指定的时间内执行一次(如果目标发生了位置移动)
    • 给元素添加的是事件处理函数,而不是事件。
    • 事件冒泡机制:  当一个元素发生一个事件(例如:click 事件)的时候,他会把发生的这个事件 传递给 父级,其父级接收到后,又向上传递给其父级,一直到 document ,这个过程叫冒泡。   当其父级,或者其 祖先元素也同样绑定了 click 事件处理函数的话, 就会执行这些事件处理函数。 (元素是否绑定事件处理函数不影响其冒泡) 
    • 例如谷歌的下拉菜单:    点击按钮的时候,下拉的菜单显示。  点击页面上除 按钮  外的其他地方,下拉菜单消失(原因: 给document 绑定了点击事件处理函数,当我们点击页面中任何一个元素的时候,都会把 点击事件 最终传递给 document 接收到  ,而document 元素又绑定了一个点击事件处理函数,于是,就执行了,下拉菜单消失)。那么同样的,当我们点击按钮的时候,点击事件也会向上传递给  document 接收到 ,他也会执其绑定的仪的点击事件处理函数===》 就是让下拉菜单隐藏 ,这个时候,我们得让点击按钮的时候,阻止事件冒泡。
    • 阻止事件冒泡:event.canceBubble = true;
    • 有的时候,可以利用事件冒泡机制,只给其父亲绑定事件处理函数而实现效果。(例如:包含结构的下拉菜单,  只给其父级LI 绑定事件处理函数即可,而不是给按钮。)
    • 事件绑定的两种方法: 1.   obj.onclick = fn1;   2.  标准以及IE9+:  obj.addEventListenner('click',fn2,false);    IE9以下:  obj.addachEvent('onclick',fn2); 
    •  1 //给一个对象绑定一个事件处理函数的第一种形式
       2 //obj.onclick = fn;
       3 function fn1() {
       4     alert(this);
       5 }
       6 function fn2() {
       7     alert(2);
       8 }
       9 
      10 //document.onclick = fn1;
      11 //document.onclick = fn2;    //会覆盖前面绑定fn1
      12 
      13 //给一个对象的同一个事件绑定多个不同的函数
      14 //给一个元素绑定事件函数的第二种形式
      15 
      16 /*
      17 ie:obj.attachEvent(事件名称,事件函数);
      18     1.没有捕获
      19     2.事件名称有on
      20     3.事件函数执行的顺序:标准ie-》正序   非标准ie-》倒序
      21     4.this指向window
      22 标准:obj.addEventListener(事件名称,事件函数,是否捕获);
      23     1.有捕获
      24     2.事件名称没有on
      25     3.事件执行的顺序是正序
      26     4.this触发该事件的对象
      27 */
      28 
      29 /*document.attachEvent('onclick', function() {
      30     fn1.call(document);
      31 });
      32 document.attachEvent('onclick', fn2);*/
      33 
      34 //是否捕获 : 默认是false    false:冒泡 true:捕获
      35 
      36 /*document.addEventListener('click', fn1, false);
      37 document.addEventListener('click', fn2, false);*/
      38 
      39 function bind(obj, evname, fn) {
      40     if (obj.addEventListener) {
      41         obj.addEventListener(evname, fn, false);
      42     } else {
      43         obj.attachEvent('on' + evname, function() {
      44             fn.call(obj);
      45         });
      46     }
      47 }
      48 
      49 bind(document, 'click', fn1);
      50 bind(document, 'click', fn2);

       我们调用函数的时候一般用  fn();   其实这样也可以调用:fn.call();   call()是每一个函数下早已经定义好的方法,其默认第一个参数,可以改变 函数内部this的指向。

      1 //call 函数下的一个方法,call方法第一个参数可以改变函数执行过程中的内部this的指向,call方法第二个参数开始就是原来函数的参数列表
      2 
      3 function fn1(a, b) {
      4 alert(this);
      5 alert(a + b);
      6 }
      7 
      8 //fn1();    //window
      9 fn1.call(null, 10, 20);    //调用函数    fn1() == fn1.call()

       事件捕获: 第二种事件绑定处理函数的最后一个参数:  false  和  true  用来分别区分 设置 事件出去  的时候 触发,和事件进去的时候触发。 (事件触发的顺序是, 就像敲键盘一样,  有一个 先按下 (进去)然后再 弹起(出来)的过程。)

    •  1 window.onload = function() {
       2         
       3     var oDiv1 = document.getElementById('div1');
       4     var oDiv2 = document.getElementById('div2');
       5     var oDiv3 = document.getElementById('div3');
       6     
       7     function fn1() {
       8         alert( this.id );
       9     }
      10     
      11     /*oDiv1.onclick = fn1;
      12     oDiv2.onclick = fn1;
      13     oDiv3.onclick = fn1;*/
      14     
      15     //false = 冒泡
      16     
      17     //告诉div1,如果有一个出去的事件触发了你,你就去执行fn1这个函数
      18     /*oDiv1.addEventListener('click', fn1, false);
      19     oDiv2.addEventListener('click', fn1, false);
      20     oDiv3.addEventListener('click', fn1, false);*/
      21     
      22     //告诉div1,如果有一个进去的事件触发了你,你就去执行fn1这个函数
      23     /*oDiv1.addEventListener('click', fn1, true);
      24     oDiv2.addEventListener('click', fn1, true);
      25     oDiv3.addEventListener('click', fn1, true);*/
      26     
      27     oDiv1.addEventListener('click', function() {
      28         alert(1);
      29     }, false);
      30     oDiv1.addEventListener('click', function() {
      31         alert(3);
      32     }, true);
      33     oDiv3.addEventListener('click', function() {
      34         alert(2);
      35     }, false);
      36     //
      37     
      38 }
    • 事件绑定的取消: 1.  obj.onclick = null;    
    • 2. 第二种方式绑定的事件  取消:
    • IE  : obj.dettachEvent(事件名称,事件函数);
    • 标准: obj.removeEventListener(事件名称,事件函数,是否捕获);
    • event对象有三个属性, ctrlkey   altkey  shiftkey 分别返回 ctrl   alt  shift 三个键是否按下的布尔值。
    • 只有一些表单元素 和 A标签  以及document  可以有 焦点事件和键盘事件。
    • onkeydown:  如果按下不抬起,会连续触发。 (事实上,当你按下一个键准备输入文本,而不抬起的时候,你会发现第一个字母出来后,第二个字母需要等一下才出来,然后后续的很快就出来了,这是因为浏览器会给一定的时间来检查是否是用户误触。 但是,做游戏的时候,我们就需要解决这个问题了。 使用定时器来解决。)
    •  1 <!DOCTYPE HTML>
       2 <html>
       3 <head>
       4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       5 <title>无标题文档</title>
       6 <style>
       7 #div1 {width: 100px; height: 100px;  background: red; position: absolute;}
       8 </style>
       9 <script>
      10 window.onload = function() {
      11     
      12     var oDiv = document.getElementById('div1');
      13     var timer = null;
      14     
      15     //不是所有元素都能够接收键盘事件,能够响应用户输入的元素,能够接收焦点的元素就能够接收键盘事件
      16     
      17     //onkeydown : 如果按下不抬起,那么会连续触发
      18     //定时器
      19     document.onkeydown = function(ev) {
      20         
      21         var ev = ev || event;
      22         
      23         switch(ev.keyCode) {
      24             case 37:
      25                 clearInterval(timer);
      26                  timer = setInterval(function(){
      27                     oDiv.style.left = oDiv.offsetLeft - 5 + 'px';
      28                 },20)
      29                 
      30                 break;
      31             case 38:
      32                 clearInterval(timer);
      33                  timer = setInterval(function(){
      34                     oDiv.style.top = oDiv.offsetTop - 5 + 'px';
      35                 },20)
      36                 break;
      37             case 39:
      38                 clearInterval(timer);
      39                  timer = setInterval(function(){
      40                     oDiv.style.left = oDiv.offsetLeft + 5 + 'px';
      41                 },20)
      42                 break;
      43             case 40:
      44                 clearInterval(timer);
      45                  timer = setInterval(function(){
      46                     oDiv.style.top = oDiv.offsetTop + 5 + 'px';
      47                 },20)
      48                 break;
      49         }
      50         
      51     }
      52 
      53     document.onkeyup = function(ev) {
      54         clearInterval(timer);
      55     }
      56     
      57 }
      58 </script>
      59 </head>
      60 
      61 <body>
      62     <div id="div1"></div>
      63 </body>
      64 </html>
    • 取消默认事件:    1.  return false;(用于 使用第一种方式绑定的事件处理函数 和 IE下 使用 第二种方式绑定的事件处理函数)      2.  ev.preventDefault(); (用于 标准浏览器使用第二种方式绑定的事件处理函数。)
    • =========================JS中的运动====================================
    • JS中读取CSS值的时候,会把小数四舍五入, 而在CSS中,是可以设置并且应用一些带小数的值。所以,在做有些效果,比如 缓冲运动的时候, 需要 向上或者向下取整。
    •  1 <!DOCTYPE HTML>
       2 <html>
       3 <head>
       4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       5 <title>无标题文档</title>
       6 <style>
       7 #div1 {100px; height: 100px; background: red; position: absolute; left: 0px; top: 30px;}
       8 </style>
       9 <script>
      10 //摩擦,减速 : 在运动过程中,速度越来越慢
      11 //愈接近目标点,速度就越小
      12 window.onload = function() {
      13     
      14     var oBtn = document.getElementById('btn');
      15     var oDiv = document.getElementById('div1');
      16     var iTimer = null;
      17     
      18     oBtn.onclick = function() {
      19         
      20         clearInterval(iTimer);
      21         var iSpeed = 0;
      22         
      23         iTimer = setInterval(function() {
      24             
      25             iSpeed = (500 - oDiv.offsetLeft) / 8;
      26             
      27             iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
      28             
      29             console.log( oDiv.offsetLeft + ' : ' + iSpeed );
      30             
      31             if (oDiv.offsetLeft == 500) {
      32                 clearInterval(iTimer);
      33             } else {
      34                 oDiv.style.left = oDiv.offsetLeft + iSpeed + 'px';
      35             }
      36             
      37         }, 30);
      38         
      39     }
      40     
      41 }
      42 </script>
      43 </head>
      44 
      45 <body>
      46     <input type="button" value="动起来" id="btn" />
      47     <div id="div1"></div>
      48 </body>
      49 </html>
    • 加入缓冲的运动框架:
    •  1 <!DOCTYPE HTML>
       2 <html>
       3 <head>
       4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
       5 <title>无标题文档</title>
       6 <style>
       7 #div1 {100px; height: 100px; background: red; position: absolute; left: 0px; top: 30px; left: 400px;}
       8 </style>
       9 <script>
      10 window.onload = function() {
      11     
      12     var oDiv1 = document.getElementById('div1');
      13     
      14     oDiv1.onclick = function() {
      15         
      16         /*startMove(this, {
      17             width : 200
      18         }, function() {
      19             startMove(this, {
      20                 height : 200
      21             });
      22         });*/
      23         
      24         startMove(this, {
      25             width : 200,
      26             height : 200
      27         });
      28     }
      29     
      30     function startMove(obj, json, fn) {
      31         clearInterval(obj.iTimer);
      32         var iCur = 0;
      33         var iSpeed = 0;
      34             
      35         obj.iTimer = setInterval(function() {
      36             
      37             var iBtn = true;
      38                         
      39             for ( var attr in json ) {
      40                                 
      41                 var iTarget = json[attr];
      42                 
      43                 if (attr == 'opacity') {
      44                     iCur = Math.round(css( obj, 'opacity' ) * 100);
      45                 } else {
      46                     iCur = parseInt(css(obj, attr));
      47                 }
      48                 
      49                 iSpeed = ( iTarget - iCur ) / 8;
      50                 iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
      51                 
      52                 if (iCur != iTarget) {
      53                     iBtn = false;
      54                     if (attr == 'opacity') {
      55                         obj.style.opacity = (iCur + iSpeed) / 100;
      56                         obj.style.filter = 'alpha(opacity='+ (iCur + iSpeed) +')';
      57                     } else {
      58                         obj.style[attr] = iCur + iSpeed + 'px';
      59                     }
      60                 }
      61                 
      62             }
      63             
      64             if (iBtn) {
      65                 clearInterval(obj.iTimer);
      66                 fn && fn.call(obj);
      67             }
      68             
      69         }, 30);
      70     }
      71     
      72     function css(obj, attr) {
      73         if (obj.currentStyle) {
      74             return obj.currentStyle[attr];
      75         } else {
      76             return getComputedStyle(obj, false)[attr];
      77         }
      78     }
      79     
      80 }
      81 </script>
      82 </head>
      83 
      84 <body>
      85     <div id="div1"></div>
      86 </body>
      87 </html>
  • 相关阅读:
    面试题
    学习Javascript闭包(Closure)
    git命令
    css3 3d翻转效果
    meta 如何写
    Java String equals和==的比较
    MySQL Explain详解
    MySQL explain,type分析(转)
    python的内存分析和处理
    python lambda的使用
  • 原文地址:https://www.cnblogs.com/wanqiu/p/4453634.html
Copyright © 2020-2023  润新知