JavaScript 基础

JS基础语法

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
    </body>

    <!-- 1.JS 的引入 -->
    <!-- 内部引入 -->
    <script type="text/javascript">
        // 变量 - 内存
        // JS 声明变量都用 var 关键字
        // 五种基本数据类型
        // 变量名要求:
        // 1. 数字、字母、下划线、和$的组合
        // 2. 不能以数字开头
        // 3. 不能是关键字和保留字
        // 4. 严格区分大小写
        // 规范: 可以使用驼峰命名法
        var a = 10; // 数值 Number
        var b = "123"; // 字符串 String
        var c = '456'; // 字符串 String
        var d = true; // 布尔类型 boolean
        var e = false; // 布尔类型 boolean
        var f = null; // 空对象 null
        var g; // 未定义类型 undefined

        // 判断相等 == ===
        // == 判断两个值是否相等
        // === 除了判断值之外,还会判断类型
        console.log("5" == 5); // ture
        console.log("5" === 5); // false

        console.log("5" != 5); // false
        console.log("5" !== 5); // ture

        // 类型转换
        // 查看类型
        console.log(typeof (a));
        // 转数字
        console.log(Number(true)); // 1
        console.log(Number(false)); // 0
        console.log(Number("123")); // 123
        console.log(Number('abc')); // NaN
        console.log(Number('a1')); // NaN
        console.log(Number('1a')); // NaN
        console.log(Number('')); // 0
        console.log(Number(' ')); // 0
        console.log(Number(undefined)); // NaN
        console.log(Number(null)); // 0

        // 字符串
        console.log(String(undefined)); //"undefined"
        // 布尔值(非0为真 非空为真)
        console.log(Boolean(-1)); // true
        console.log(Boolean("")); // false

        // 隐式转换
        // 加号两边如果有一个是字符串,就是拼接字符串(例如: 1 + "234" -> "1234")
        // 其他算术运算符是转化为数值计算
        console.log(3 + true); // 4
        console.log(3 + null); // 3
        console.log(true + "3"); // "true3"
        console.log(3 - true); // 2
        console.log(3 + undefined); // NaN

        // 转数字 parseInt()
        console.log(parseInt(5.6)); // 5
        console.log(parseInt("5.6")); // 5
        console.log(parseInt("34asd")); // 34
        console.log(parseInt("34as6")); // 34
        console.log(parseInt("a34sd")); // NaN

        // 10进制 -> 2进制
        console.log(parseInt(15, 10));

        // 生成随机数
        var num = parseInt(Math.random() * (30 - 20 + 1) + 20);
        console.log(num);

        // 函数 JS 里面的变量只分为函数内部的局部变量,和函数外面的全局变量
        function Test(a, b){
            console.log(a + b);
            return a * b;
        }
        var t = Test(10, 20, 30);
        console.log(t);

        // 匿名函数

        var fn = function(){
            console.log("匿名函数1");
        };

        // 匿名函数自执行
        (function(){
            console.log("匿名函数2");
        })();

        (function(){
            console.log("匿名函数3");
        }());

        fn();

        console.log("hello world");
    </script>
    <!-- 外部引入 -->
    <script  type="text/javascript" src="index.js"></script>
</html>

<script type="text/javascript">
    var items = document.getElementsByClassName('item');
    var last = items[0];
    // 4、循环配合一组元素(div)使用
    for(var j = 0; j < items.length; j++){
        items[j].index = j; //3.1循环的时候每个div发一个学号。让这个div自己记住自己是第几个。
        items[j].onclick = function(){
            // 3.2需要知道某一个div是第几个的时候,就让他自己报出来自己的学号。
            // console.log(this.index);

            // 2、写代码的时候实现某一功能思路很多,要找一个性能最好的来实现。
            // for(var i = 0; i < items.length;i++){
            //  items[i].style.backgroundColor = "red";
            // }
            // //1、 谁执行的点击方法 this就是谁。
            // this.style.backgroundColor = "blue";

            last.style.backgroundColor = "red";
            this.style.backgroundColor = "blue";
            last = this;
        }
    }

    // for(var i = 0; i < 10; i++){
    //  setTimeout(function(){
    //      console.log(i);
    //  }, 1000);

    // }
    // i = 100;
</script>

DOM的简单操作

<script type="text/javascript">
    // 获取对象
    var first = document.getElementById("first");
    // 修改背景颜色
    first.style.backgroundColor = "blue";
    // 修改边框属性
    first.style.border = "5px solid green";
    // 修改外边距
    first.style.margin = "100px auto";
    // 旋转
    first.style.transform = "rotate(45deg)";

    // 获取、修改内容
    first.innerHTML = "<p>福</p>"; // 可以解析字符串中的标签
    first.innerText = "<p>福</p>"; // 只可添加文本内容(留言板),不可以解析字符串中的标签
    console.log(first.innerHTML);
    console.log(first.innerText);

    // 通过类名获取一组元素
    var userNames = document.getElementsByClassName("userName");
    // userNames 是所有类名为 userName 的集合
    userNames[0].value = "输入框";
    console.log(userNames[0].value);

    // 通过类名获取某个元素
    var userName = document.getElementsByClassName("userName")[0];
    // userNames 是所有类名为 userName 的集合
    userName.value = "搜索框";
    console.log(userName.value);

    // 通过标签名获取
    var button = document.getElementsByTagName("input")[1];
    var temp = 1;
    // 添加点击方法,每次点击都会执行
    button.onclick = function(){
        console.log(userName.value);
        userName.value = temp++;
        first.style.transition = "1s";
        first.style.width = temp * 10 + "px";
        first.style.height = temp * 10 + "px";
    }
</script>

定时器

<script type="text/javascript">
    // 一次性定时器/延时器
    // 第一种写法
    setTimeout(function(){

    }, 1000);
    // 第二种写法
    setTimeout(f, 1000);
    function f(){
        console.log("执行 f");
    }

    // 循环定时器
    var timer = setInterval(function(){
        console.log("循环定时器");
    }, 2000);

    setTimeout(function(){
        // 清除定时器
        clearInterval(timer);
        // clearTimeout()
    }, 8000);

    var first = document.getElementById("first");
    first.onclick = function(){
        var move = setInterval(function(){
            first.style.left = first.offsetLeft + 5 + "px";
            if (first.offsetLeft >= 500) {
                clearInterval(move);
            }
        }, 20)
    }
</script>

事件

鼠标事件
    redDiv.onmousemove = function(){
        console.log("鼠标移动的时候触发");
    }
    redDiv.onclick = function(){
        console.log("单击事件");
    }
    redDiv.ondblclick = function(){
        console.log("双击事件");
    }
    redDiv.onmousedown = function(){
        console.log("鼠标按下事件");
    }
    redDiv.onmouseup = function(){
        console.log("鼠标抬起事件");
    }
    redDiv.oncontextmenu = function(){
        console.log("鼠标右击事件");
        // 阻止默认右键弹出右键栏
            return false;
    }
    // over 和 out 会在鼠标从 redDiv 的父级移到子级的时候触发,先触发 out 再触发 over
    // leave 和 enter 从父级移到子级不会触发,只有鼠标离开/移入整个 redDiv 的时候才会触发
    redDiv.onmouseover = function(){
        console.log("over 移入");
    }
    redDiv.onmouseout = function(){
        console.log("out 移出");
    }
    redDiv.onmouseleave = function(){
        console.log("leave 移出");
    }
    redDiv.onmouseenter = function(){
        console.log("enter 移入");
    }

键盘事件

    document.onkeydown = function(){
        console.log("down键盘按下");
    }
    document.onkeypress = function(){
        console.log("press 键盘按下");
    }
    document.onkeyup = function(){
        console.log("键盘抬起事件");
    }

表单
    userName.onchange = function(){
        console.log("change内容发生改变之后触发");
    }
    userName.oninput = function(){
        console.log("input内容发生变化之后触发");
    }
    userName.onfocus = function(){
        console.log("聚焦");
    }
    userName.onblur = function(){
        console.log("失焦");
    }
    // 给 form 表单绑定事件
    reg.onsubmit = function(){
        console.log("提交");

        // 阻止默认跳转
        return false;
    }
    reg.onreset = function(){
        console.log("重置");

        // 阻止默认重置
        return false;
    }

window 事件
    window.onresize = function(){
        console.log("窗口尺寸发生变化的时候触发");
    }
    window.onscroll = function(){
        console.log("窗口内容滚动的时候触发");
    }
    window.onload = function(){
        console.log("窗口加载完毕之后触发");
    }

事件对象

<script type="text/javascript">
    // 鼠标事件 -> 位置
    var redDiv = document.getElementsByClassName("redDiv")[0];
    redDiv.onclick = function(){
        var evObj = window.event || ev;
        // 触发事件的元素(触发事件的元素不一定是绑定事件的元素)
        console.log(evObj.target);
        // 鼠标距离窗口顶部的坐标
        console.log(evObj.clientY);
        // 鼠标距离页面顶部的坐标
        console.log(evObj.pageY);
        // 鼠标距离 target 顶部的坐标
        console.log(evObj.offsetY);
    }
    // press 区分大小写,但不支持特使按键
    // down 不区分大小写,支持特殊按键
    document.onkeypress = function(ev){
        console.log("press" + ev.keyCode);
    }
    document.onkeydown = function(ev){
        // keyCode 标识哪一个按键
        console.log(ev.keyCode);
        if (ev.keyCode == 66) {
            console.log("按了 B");
        }
        // 判断组合键
        if (ev.keyCode == 66 && ev.metaKey) {
            console.log("按了 command + B");
        }
    }
</script>

动画


    /*动画名称*/
    animation-name: run;
    /*动画时长*/
    animation-duration: 1s;
    /*动画运动方式*/
    animation-timing-function: linear;
    /*动画延时*/
    /*animation-delay: 1s;*/
    /*动画次数*/
    /*infinite 无限*/
    animation-iteration-count: 1;
    /*动画方向*/
    /*reverse 反向*/
    /*normal 正常*/
    /*alternate 单数正向,双数反向*/
    /*alternate-reverse 双数正向,单数反向*/
    animation-direction: normal;
    /*
        forwards 动画结束的时候停留在当前位置
        backwards 在动画延时期间,元素的位置在动画起始的位置
        both 包含以上两个效果
    */
    animation-fill-mode: both;

事件捕获和冒泡

<script type="text/javascript">
    var box = document.getElementsByClassName("box")[0];
    var mid = document.getElementsByClassName("mid")[0];
    var item = document.getElementsByClassName("item")[0];
    // 事件冒泡 - 阻止事件冒泡
    box.addEventListener("click", function(){
        console.log("box");
    }, false);
    mid.addEventListener("click", function(){
        console.log("mid");
    }, false);
    // item.addEventListener("click", function(){
    //  console.log("item");
    // }, false);
    item.addEventListener("click", function(ev){
        // 取消冒泡 不让事件继续
        ev.cancelBubble = true; // 第一种
        ev.stopPropagation(); // 第二种
        // 兼容写法
        if (ev.stopPropagation) {
            ev.stopPropagation();
        } else{
            ev.cancelBubble = true;
        }
        console.log("小明");
        // 阻止默认事件
        ev.preventDefault(); // 第一种
        ev.returnValue = false; // 第二种
        return false; // 第三种
    }, false);
</script>

事件绑定

<script type="text/javascript">
    var redDiv = document.getElementsByClassName("redDiv")[0];
    // 事件绑定 -> 给一个元素绑定多个相同事件
    redDiv.addEventListener("click", f1, false);
    redDiv.addEventListener("click", f2, false);
    function f1(){
        console.log(1);
    }
    function f2(){
        console.log(2);
    }
    // 移除事件绑定
    redDiv.removeEventListener("click", f2, false);
</script>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值