html5之js学习

js:主要给页面中的元素设置一些动态事件,让用户和界面之间进行交互
JS的基础语法:
//js是一门弱语言,java是一门强语言
// 强弱语言的区别:1,java中必须要明确变量的数据类型而js中所有的数据类型都是var,具体数据类型由系统自动识别
//2,java中有具体的作用域,而js中只有function中有作用域
console.log(“我是js的外联式引入”);
//变量的本质就是一块内存空间,js声明变量都用var
// js中变量的基本数据类型有:Number(数字),String(字符串),boolean类型(只有true和false两种类型),null类型(空类型),undefined(未定义类型)
//java在声明变量的时候需要将数据类型具体化,因为java是强类型的语言,而js统一数据类型为var,因为js是弱语言
//变量名的要求:数字,字母,下划线和$的组合,不能以数字开头,不能是系统关键字和保留字,严格区分大小写,使用驼峰命名法

var a = 10;
var b = "123";
var c = '456';
var d = true;
var e = false;
var f = null;
var g;//未定义类型:undefined
//转换成boolean类型的值:1.数字类型转换成boolean类型:非0为真 2.字符串类型转换boolean类型:非空为真
console.log(Boolean(1));
//隐式转换:1.加号两边如果有一个字符串,就是拼接字符串 2.如果是其它类型的数据,就是转换为数值计算
var a = 5+'123';
//随机数的生成
Math.random();//生成[0 1)之间的随机数
// 生成某个范围中的随机整数parseInt(Math.random()*(最大值-最小值+1)+最小值);
console.log(parseInt(Math.random()*(50-40+1)+40));

JS中的函数:

function test(a,b)
{
   console.log(a+b);
   return a*b;
}
//匿名函数:1,将匿名函数保存到一个变量中,
var fn = function () {
  console.log('我是一个匿名函数');
};
fn();
//匿名函数:2.直接在匿名函数后面加上()直接调用,立即执行,这种情况需要将整个匿名函数用()括起来
(function () {
    console.log("我是立即执行的匿名函数");
})();
(function () {
    console.log("我是立即执行的匿名函数2");
}());
fn();
// JS里面的变量只分为函数内部的局部变量和函数外面的全局变量,之所以使用匿名变量就是为了使用函数的作用域
function f1()
{
  var  a = 10;
  function f2()
  {
    console.log(a);
    var  a = 20;
    console.log(a);
  }
}
f1();

JS中的数组:var ay =[1,2,3,4,5];,JS中的数组的长度是可以改变的
//数组的遍历
for(var i=0;i<ay.length;i++)
{
console.log(ay[i]);
}
ay[5]="6";//虽然数组的只有5个元素,但是ay[5]会给数组添加一个元素

DOM操作:
js中获得页面的元素方法有:
1.document.getElementsByClassName()
2.document.getElementsByTagName()
3.document.getElementsById()

//获取div
    var div = document.getElementsByTagName('div')[0];
    //修改页面元素的样式
    //1.JS中均采用驼峰命名法
    //2.JS操作的均是 行间式
    div.style.backgroundColor = "green";
    //获取页面元素的样式:只能获取行间式样式,且带有单位
    var width = div.style.width;
    //只能获取行间式中的元素样式或计算后的样式(可以获取所有样式包含特殊伪类),且带有单位,但是该方法是只读方法
    var width2 = getComputedStyle(div,null).width;
    console.log(width2);
    //获取计算后样式并修改:
    div.style.width = parseInt(width) * 2 + "px";
    div.style.borderRadius = "50%";
    //修改页面元素内容:
    div.innerText = "修改内容";
    div.innerHTML = "<i>再次修改</i>";
    //outterText,
    //给div添加一个全局属性
    div.setAttribute("name","div");
    //给div添加一个标识
    div.index = 10;
    var sup = document.querySelector(".sup");
    //获取父级--永远是一个元素
    // var body = docment.querySelector("body");
    var body = sup.parentElement;
    console.log(body);
    //获取子级元素--永远是个集合
    var children = sup.children;
    console.log(children);
    var sub2 = children[1];
    //获取a标签
    var a = sub2.parentElement.parentElement.children[1].children[0];
    // nextElementSibling:下一个兄弟元素
    // previousElementSibling:下一个兄弟元素
    //parentElement:父级元素
    console.log(a);
    //删除a元素
    // a.remove();//自身删除
    a.parentElement.removeChild(a);//父级删除子级元素
    //获取目标页面元素
    var wrap = document.getElementsByClassName("wrap")[0];
    //创建DOM节点
    var redDiv = document.createElement("div");
    //设置节点相关属性
    redDiv.style.width = "200px";
    redDiv.style.height = "200px";
    redDiv.style.backgroundColor = "red";
    //将节点添加到目标页面元素上
    wrap.appendChild(redDiv);
    var yellowDiv = document.createElement("div");
    //通过类名整体操作样式
    yellowDiv.className = "yellowDiv";
    //默认添加到页面元素的最下面
    // wrap.appendChild(yellowDiv);
    //将yellowDiv添加到redDiv之前
    wrap.insertBefore(yellowDiv,redDiv);

JS中的事件主要有:鼠标事件和键盘事件

 redDiv.onclick = function () {
        console.log("单击事件");
    }
    redDiv.ondblclick = function () {
        console.log("双击事件")
    }
    redDiv.onmouseover = function () {
        console.log("鼠标移入事件")
    }
    redDiv.onmousedown = function () {
        console.log("鼠标按下事件")
    }
    redDiv.onmouseup = function () {
        console.log("鼠标抬起事件")
    }
    redDiv.oncontextmenu = function () {
        console.log("鼠标右击事件")
        //阻止鼠标右击的默认事件
        return false;
    }
    redDiv.onmouseout = function () {
        console.log("鼠标移出事件")
    }
    //over和out会在鼠标从父级元素移到子级元素的时候,触发一次移出和移入
    // leave和enter从父级移到子级不会触发(凡是在父级元素的范围内就不会触发,只有在鼠标移出父级范围才会触发)
    redDiv.onmouseleave = function () {
        console.log("鼠标移出事件")
    }
    redDiv.onmouseenter = function () {
        console.log("鼠标移入事件")
    }
    redDiv.onmousemove = function () {
        console.log("鼠标移动的时候触发")
    }
    //键盘事件:只能绑定给一些特定的元素
    //绑定给document
    // document.onkeydown = function () {
    //     console.log("down键盘按下")
    // }
    // document.onkeypress = function () {
    //     console.log("press键盘按下")
    // }
    // document.onkeyup = function () {
    //     console.log("键盘抬起事件")
    // }
    //表单中的一些事件:
    uName.onchange = function () {
        console.log("change:内容发生改变之后触发,当内容输入完毕后才触发")
    }
    uName.oninput = function () {
        console.log("input:内容发生改变后触发,实时监听")
    }
    uName.onfocus = function () {
        console.log("聚焦")
    }
    uName.onblur = function () {
        console.log("失焦")
    }
    //给整个form表单绑定事件
    reg.onsubmit = function () {
        console.log("提交表单时触发的方法")
        //阻止提交按钮的默认事件
        return false;
    }
    reg.onreset = function () {
        console.log("重置表单时触发的方法")
    }
    //window窗口的事件
    window.onresize = function () {
        console.log("当窗口的尺寸发生变化的时候触发")
    }
    window.onscroll = function () {
        console.log("当窗口内容滚动的时候触发")
    }
    //img.onload(图片加载完毕后触发的方法)
    window.onload = function () {
        console.log("窗口加载完毕后触发")
    }

事件对象:
scrollLeft:设置或获取当前左滚的距离,即左卷的距离;
scrollTop:设置或获取当前上滚的距离,即上卷的距离;
scrollHeight:获取对象可滚动的总高度;
scrollWidth:获取对象可滚动的总宽度;
clientHeight:内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度(不含边框,也不包含滚动条等边线,会随窗口的显示大小改变)

clientLeft,clientTop: 这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位改元素,他的值就是0.
返回对象的offsetLeft属性值和到当前窗口左边的真实值之间的距离,可以理解为边框的长度
offsetLeft:获取对象左侧与定位父级之间的距离
offsetTop:获取对象上侧与定位父级之间的距离
PS:获取对象到父级的距离取决于最近的定位父级
offsetWidth:获取元素自身的宽度(包含边框)
offsetHeight:获取元素自身的高度(包含边框)

offsetLeft:获取对象左侧与定位父级之间的距离 
offsetTop:获取对象上侧与定位父级之间的距离 
PS:获取对象到父级的距离取决于最近的定位父级 
offsetWidth:获取元素自身的宽度(包含边框) 
offsetHeight:获取元素自身的高度(包含边框)
 document.onkeydown = function (ev) {
        //keyCode标识了触发事件的是哪一个按键
        console.log(ev.keyCode);
        if  (ev.keyCode==65)
        {
            console.log("按了a键,发射");
        }
        if (ev.keyCode==65&&ev.metaKey==true)
        {
            console.log("按了组合键:command+a");
        }
    }
    //press的事件对象区分大小写,但是不支持特殊的按键,keydown的事件对象不支持大小写,但是支持特殊按钮
    document.onkeypress = function (ev) {
        console.log("press:"+ev.keyCode);
    }

JS中的定时器有两种:
1.一次性的定时器:setTimeout();在一定时间后执行一次定时器中的函数
2.//循环定时器:每隔一段时间都会执行一次定时器中的函数 setInterval()
清除定时器的方法也是有两种:1.clearTimeout();2.clearInterval()

//循环定时器
var timer  = setInterval(function () {
        console.log("执行了"+a++);
    },2000);
    //一次性定时器
    setTimeout(function () {
        //清除定时器
        clearTimeout(timer);
    },10000);

JS中的动画效果:

  /*动画名称*/
            animation-name: run;
            /*动画执行的时长*/
            animation-duration:1s;
            animation-timing-function:linear;
            /*动画的延迟时长*/
            /*animation-delay: 1s;*/
            /*动画执行的次数 infinite:无数次*/
            animation-iteration-count: 1;
            /*动画的方向,默认是normal,reverse:反向执行,alternate:奇数次正向执行,偶数次反向执行,看到的效果就是来回摆动*/
            /*alternate-reverse:效果和alternate刚好相反*/
            animation-direction:normal;
            /*forwards:动画结束的时候,让元素不再回到初始的位置而是停留在当前位置*/
            /*backwards:动画结束之后,让元素回到初始的位置;动画延迟期间,元素的位置会变成动画的起始位置*/
            /*both:有上面两种的特点:动画结束停留在当前位置,动画延迟期间,元素的位置会变到动画的起始位置*/
            animation-fill-mode: forwards;
            //自定义动画
                    @keyframes run {
           from
            {
          }
            to
            {
            }

JS中的ajax异步请求数据:

 var request = new XMLHttpRequest()
 //第一个参数是请求数据的方式:get或者post;
//第二个参数是url:请求数据的路径
 //第三个参数true/false:请求数据是否为异步请求
  request.open("get","file:///Applications/XAMPP/xamppfiles/htdocs/ajax/test.json",true)
    request.send()
    //请求事件
    request.onreadystatechange = function () {
        if (request.readyState == 4 && request.status==200)
        {
            console.log(request.responseText);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值