Js学习笔记

分类:N10_前端

标签:

2016.01.07_js第一个特效,鼠标提示框

1. document.getElementById('').style.display='block'; //主要的是处理兼容性问题
2. onmouseover,onmouseout  鼠标移入,移出事件。
3. 例句:onmouseover="document.getElementById('').style.display='block';"
4. 编写JS的流程
  布局:HTML+CSS
  属性:确定要修改的属性
  事件:确定用户做了那些操作(产品设计)
  编写JS:在事件中,用JS来修改页面的样式
 
5. 初识函数
  函数的格式, 例如:function toGreen(){代码}
  变量的使用(变量可以理解为别名)
  函数的定义和调用
  函数定义:只是告诉系统有这个函数,不会实际执行
  函数调用:真正执行函数里的代码
  例子:function show(){ alert('abc');}  //定义函数show()  show();//调用函数,如果没有调用,则不起作用。就像法律与执行法律的,没有人执行,法律是没有用的。

2016.01.07_js第二个特效,网页换肤

1. 任何标签都可以加Id,包括link,html 等等。 例如:{OL.herf='2.css';}
2. 任何标签的任何属性都是可以修改的。
3. Html里面怎么写,JS里面就怎么写。{OL.title='abc';}

4. if语句的使用,用来判断
  function showHide(){
  var oDiv =document.getElementById('odiv');
if(oDiv.style.display=='block'){
   oDiv.style.display='none';
}else{
}  oDiv.styel.display='block';
  }

5. 为a连接添加JS
  <a href="javascript:;">连接</a>  点击时,页面不会有反映,不像#一样跳转。
6.  ClassName的应用 应为Class是JS的关键字。所以,div的class,需要写成ClassName。

2016.01.07_函数传参,提取行间事件,循环,选项卡


1. 函数传参,
  functions show(a,b){alert(a+b);} show(12,34);  //show(a,b)中的a,b作用是占位符。
2. 属性操作的第二中方法,oTxt[name]='abc'
  name可以是参数,可以是变量,比较灵活。 对比oTxt.value='abc'
  变量和字符串的区别:
  变量,参数,可以不用加引号,而字符串就要加引号。
  .style 加样式,是加入到行间  从.style 取样式,也是从行间取出。
  样式的优先级,行间的优先CSS的class,一般的style与class只用一种。
3. 提取行间事件,既是不在行间加如onclick等等的事件。
4. 匿名函数的格式  oBtn=function(){}
5. 为了不使js先加载,用Windows.onload=function(){}
6. 获得一个类型的元素。用:document.getElementsByTagName('div')
 
7. 循环while,例句
var i=0;     //1,初始化
while(i<5){  //2,条件
  alert(i);  //3,语句
  i=i+1;     //4,自增
}

8. for循环,复选框,选中改为不选,不选改为选中。

2016.01.08_选项卡,年历


1. this:当前发生事件的元素
2. 自定义属性,index, 例如:oD[i].index=i  adiv[this.index].style.display='block';
  2个循环搞定,第一个是给所有的按钮加点击事件,第二个是让所有显示的隐藏。
3. 年历,修改div中的文字。innerHTML的使用,能在里面写HTML。如<h1>123</h1>
4. JS中字符串的连接"+"; 例如:alert('abc'+12+5+'def')  输出为abc125def,计算机是按循序相加。
  如果是alert('abc'+(12+5)+'def') 输出为abc17def.
5. 数组的使用。

2016.01.08_JS的基础


JS组成:ECMAScript:用来翻译  
 DOM:document,object ,Model
 BOM: browser , object ,Model
1. 变量的类型
常见的变量类型有:number,string,boolean,undefined,object,function
建议:一个变量应该只存一种类型的数据。
可以用typeof查看变量的类型。例如:var a=123 ;alert(typeof a);
2. 数据类型的转换
字符串转换成数字:parseInt() var a='34px' alert(parseInt(a); 结果为34
parseInt():只能转换整数;转成小数用parseFloat();
// NaN = not a number;没有数字  JS中NaN与NaN不等。
判断是不是NaN用:isNaN();
隐性的转换,== //先转换再比较。 ===//不转换,需要两边全等 -//先转换

3. 变量的作用域与闭包
局部变量与全局变量
闭包:子函数可以使用父函数的局部变量

4. 命名规范
命名规范及必要性
 可读性-能看懂
 规范性-符合规则
匈牙利命名法
 类型前缀例如,字母大写:
 
 类型  前缀 类型  例子
 数组   a  Array  aItems
 布尔值  b    Boolean  bIscomplete
 浮点数  f  float  fPrice
 函数  fn  Function  fnHandler
 整数  i  Integer  iItemcount
 对象  o  Object  oDiv1
 正则表达式  re  RegExp  reEmailCheck
 字符串  s  String  sUserName
 变体变量 v   Variant  vAnything
 
5. 运算符
主要的几个运算符:+ - * / %
%取模, 例如:alert(7%2) 弹出的结果为3;
用于:隔行变色,if(i%2==0)
时间转秒,例如:var s=156; alert(parseInt(s/60)+'分'+s%60+'秒');
i++ // i+=1  //i=i+1   三个的效果是一样的。
!= / !==
&&:并且  //  ||:或者  //  !:否 调换真价值。
6. 程序流程控制语句
判断:if、switch、?:
 switch(变量){
  case 值1:
  break;
  case 值2;
  break;
   ···
  default:默认值;  
 }

?: 三元运算符; 代替if,else;
条件?(语句1):(语句2) 例如var a=15; a%2==0?alert('双数'):alert('单数')

循环:while 、for
跳出:break 、continue
什么是真,什么是假:
 真:true、非零数字、非空字符串、非空对象
 假:false、数字零、空字符串、空对象、undefined
7.  Json  {a:12,b:15,c:42}  alert(json.a);//alert(json['a'])
循环用for(var i in json){ alert('第'+i+'个东西:'+json[i]);}

2016.01.08_深入Javascript;

  1. 函数的返回值 用:return,那里调用,返回到那里,但是返回值只有一个,要是多个,可以折中,用json

  2. 函数传参arguments:可变参,不定参。


    var result=0; for(var i=0;i<arguments.length;i++){result+=arguments[i];}
    return result;
    alert(sum(12,13,14));
    css()函数
    css(oDiv,'width') 获取样式    css(oDiv,'width','200px') 设置样式

    获取非行间的样式(不能用来设置):


    currentStyle 只是IE支持
    getComputedStyle  兼容火狐,Chrome
    alert(oDiv.currentStyle.width);
    alert(getComputedStyle(oDiv,false),width);
    几个同时兼容的模式
    if(oDiv.currentStyle)
    {  
    alert(oDiv.currentStyle.width);
    }else{
    alert(getComputedStyle(oDiv,false),width);
    }
  3. 数组基础 数组的使用


    定义 var arr=[12,13,14]; 或者 var arr=new Array(12,13,14);

    数组的属性


    length
    既可以获取,也可以设置
    例子:快速清空数组  oDiv.length=0;

    数组使用原则:数组中应该只存在一中类型的变量数组的方法


    添加
    push(元素),从尾部添加
    unshift(元素),从头部添加
    删除
    pop(),从尾部弹出
    shift(),从头部弹出

    splice (万能操作)
    splice(开始,长度,元素...)
    先删除,后插入
    删除
    splice(开始,长度)
    插入
    splice(开始,0,元素...)
    替换
    splice(开始,2,a,b) 先删除2个,后插入2个,等同与替换

    转换类 ,数组的连接


    concat():连接两个数组  例如:var a=[1,2] var b=[3,4]
    alert(a.concat(b));  结果为[1,2,3,4]
    join():拼接数组; 例如:var arr=[1,2,3] alert(arr.join('-'));
    结果为[1-2-3];

    排序


    sort([比较函数]),排序一个数组 sort:只是认识字符串
    排序一个字符串数组
    排序一个数字数组
    帮助sort认识数字例句:
    var arr=[12,8,99,112]
    arr.sort(function(n1,n2){
    return n1-n2;
    });
    alert(arr);

2016.01.09_深入Javascript;

  1. 定时器的作用开启定时器


    setInterval  间隔型 ; setInterval(要执行的函数,间隔时间)
     例句:setInterval(show,1000);表示每个1000毫秒执行一次函数show()
    setTimeout   延时型; setInterval(要执行的函数,延时的时间)
     例句:setInterval(show,1000);表示隔1000毫秒后执行函数show(),仅仅执行一次函数
    停止定时器
    clearInterval  间隔型
    clearTimeout   延时型
  2. 数码时钟效果思路获取系统时间


    Date对象
    getHours、getMinutes、getSeconds
    var oDate=new Date()
    var str=toDoule(oDate.getHours())+toDoule(oDate.getMinutes())+toDoule(oDate.getSeconds())

    显示系统时间


    字符串连接
    空位补零
    function toDoule(n){
     if(n<10){
     return '0'+n;
     }else{
     return ''+n;
     }
    }
    跟随系统时间,改路径
    function tick{ 获得当前时间,更改图片路径}
    setInterval(tick,1000);
    tick()  //防止启动时为全零

    设置图片路径


    charAt方法,解决兼容模式问题 charAt(a)
    aImg[i].src='img/'+str.charAt(i)+'.png';

    Date对象其他方法


    年:getFullYear()
    月:getMonth() //特殊点:需要+1,(Date.getMonth()+1)
    日:getDate()
    星期:getDay()

    延时提示框


    效果演示
    原来的方法:移入显示,移出隐藏
    移出延时隐藏:移入下面的Div后,还是隐藏
    简化代码:合并两个相同的mouseover和mouseout
    var timer=null;
    oDiv2.onmouseover=oDiv1.onmouseover=function()
    {
    clearTimeout(timer);
    oDiv2.style.display='block';
    }

    oDiv2.onmouseout=oDiv1.onmouseout=function()
    {
    timer=setTimeout(function(){
    oDiv2.style.display='none';
    },500);
    }

    无缝滚动-基础


    效果演示
    物体运动基础  position:absolute;
    让Div移动起来
    offsetLeft的作用
    用定时器让物体连续移动:定时的

    无缝滚动


    效果原理:让ul一直向左移动
    复制li :innerHTML和+=
     修改ul的width
    滚动过边界后,设置位置:判断过界    

    无缝滚动-扩展


    改变滚动反向
    修改speed
    修改判断条件
    鼠标移入暂停
    移入关闭定时器
    移出重新开启定时器

    例子:<head>


    <style>
    *{margin:0;padding:0;}
    #div1{width:714px;height:108px;margin:100px auto;
      position:relative;background:red;overflow:hidden}
    #divl ul{position:absolute;left:0;top:0;}
    #div1 ul li{float:left;width:178px;height:108px;list-style :none;}
    </style>
    </head>
    <script>
    window.onload=function()
    {
     var oDiv=document.getElementById('div1');
     var oUl=oDiv.getElementsByTagName('ul')[0];
     var aLi=oUl.getElementsByTagName('li');
     
     oUl.innerHTML=oUl.innerHTML+oUl.innerHTML;
     oUl.styel.width=ali[0].offsetWidth*aLi.length+'px'
     function move(){
      if(oUl.offsetLeft<-oUl.offsetWidth/2)
      {
       oUl.style.left='0';
      };
      if(oUl.offsetLeft>0)
      {
       oUl.style.left=-oUl.offsetWidth/2+'px';
      };
      oUl.style.left=oUl.offsetLeft+speed+'px';
     };
    var timer=setInterval(move,30);
     oDiv.onmouseover=function()
     {
      clearInterval(timer);
     };
     oDiv.onmouseout=function()
     {
      timer=setInterval(move,30);
     };
     document.getElementByTagName('a')[0].onclick=function()
     {
      speed=-2;
     };
     document.getElementByTagName('a')[0].onclick=function()
     {
      speed=2;
     };
     };
     </script>
    <body>
     <a href="javascript:;">向左走</a>
     <a href="javascript:;">向右走</a>
     <div id='div1'>
      <ul>
       <li><img src='#'/></li>
       <li><img src='#'/></li>
       <li><img src='#'/></li>
       <li><img src='#'/></li>
      </ul>
     </div>
    </body>

     例子结束!

2016.01.09_DOM基础

  1. DOM基础什么是DOM  为document


    浏览器支持的情况 IE(6-8):10%  火狐:99%  chrome:60%

    DOM节点  节点,元素,标签,三个说的是同一个。


    childNodes  nodeType  配合循环子节点
    for(var i=1;i<oUl.childNodes.length;i++)
    {
    if(oUl.childNodes[i].nodeType==1)
    {
     oUl.childNodes[i].style.background='red';
    }
    }
    获取字节点
    children //比nodeType好用
    parentNode
    例子:点击连接,隐藏整个li  利用<a>的父节点来操作li
    offsetParent
    例子:获取元素在页面上的实际位置

    2.DOM基础2DOM节点(2)


    首尾子节点
    有兼容性问题
    firstChild、firstElementChild
    lastChild、lastElementChild
    兄弟节点
    有兼容性问题
    nextSibling、nextElementSibling
    previousSibling、previousElementSibling
    兼容处理:例子
    if(oUl.firstElementChild)
    {
     oUl.firstElementChild.style.background='red';  
    }
    else{
     oUl.fisrstChild.style.background='red';
    }
  2. 操作元素属性元素属性操作


    第一种:oDiv.style.display='block';
    第二种:oDiv.style['display']='block';
    第三种:Dom方式

    DOM方式操作元素属性


    获取:getAttribute(名称)
    设置:setAttribute(名称,值)
    删除:removeAttribute(名称)

    DOM元素灵活查找


    用className选择元素
    如何用className选择元素
     选出所有元素
     同过className条件筛选
     例句: //获取页面所有的class='box'元素,并且背景变为红色
     for(var i=0;i<aLi.length;i++)
     {
      if(aLi[i].className=='box')
      {
       aLi[i].style.background='red';
      }
     }
    封装成函数  className 经常用,可以封装成为一个函数
      function getByClass(oParent,sclass){
      var aResult=[];
      var aEle=oparent.getElementByTagname('*');
      for (var i=0;i<aEle.length;i++)
      {
       if(aEle[i].className==sClass)
       {
        aResult.push(aEle[i]);
       }
      }
      }
    使用例句: var aBox=getByClass(oUl,'box');  获得oUl里面所有的class='box'元素

2016.01.09_DOM操作应用

  1. 创建DOM元素createElement(标签名)  创建一个节点


    appendChile(节点)   追加一个节点
    例子:为ul插入li
    var oBtn=document.getElementById('btn1');
    var oUl=document.getElementById('ul1');
    var oTxt=document.getElementById('txt');
    oBtn.onclick=function()
    {
    var oLi=document.createElement('li');
    oLi.innerHTML=oTxt.value;
    //父级.appendChild(子节点);
    oUl.appendChild(oLi);
    }

    插入元素


    insertBefore(节点,原有节点) 在已有的元素前插入
    例子:倒序插入li
    var oBtn=document.getElementById('btn1');
    var oUl=document.getElementById('ul1');
    var oTxt=document.getElementById('txt');
    oBtn.onclick=function()
    {
    var oLi=document.createElement('li');
    var aLi=oUl.getElementsByTagName('li');//获得所有li,知道插入到那个li的前面
    oLi.innerHTML=oTxt.value;
     //父级.appendChild(子节点);
    if(aLi.length>0)
    {
     oUl.insertBefore(oLi,ali[0]);
    }else{
     oUl.appendChild(oLi);
    }

    }

    删除DOM元素

    removeChild(节点) 删除一个节点 例子:删除li var aA=document.getElementsByTagName('a'); var oUl=document.getElementById('ul1'); for(var i=0;i<aA.length;i++) { aA[i].onclick=function() { oUl.removeChild(this.parentNod); }; }
  2. 文档碎片; 要插入的li,多个一起插入。 //现在基本没有什么用。只有低级的浏览器才有用。文档碎片可以提高DOM操作性能(理论上)

    文档碎片原理 使用:document.createDocumentFragment() 例子: var oUl=document.getElementById('ul1'); var oFrag=document.createDocumentFragment(); for(var i=0;i<1000;i++) { var oLi=document.createElement('li'); oFrag.appendChild(oLi); } oUl.appendChild(0Frag);

 

修改内容