抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

2024-08-27

  • 浏览器对象模型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    BOM
    浏览器对象模型
    BOM为我们提供了一组对象,通过这组对象可以完成对浏览器的各种操作
    BOM对象:
    "Window" 代表浏览器窗口(全局对象)
    "Navigator" 浏览器的对象(可以用来识别浏览器
    navigator.userAgent 返回一个用来描述浏览器信息的字符串
    "Location" 浏览器的地址栏信息
    可以直接将Location的值修改为一个新的地址,这样会使得网页发生跳转
    location.assign() 跳转到一个新的地址
    location.replace() 跳转到一个新的地址(无法通过回退按钮回退)
    location.reload() 刷新页面,可以传递一个true来强制清缓存刷新
    location.href 获取当前地址
    "History" 浏览器的历史记录(控制浏览器前进后退)
    history.back() 回退
    history.forward() 前进
    history.go() 正负数控制前后跳转的界面量

    "Screen" 屏幕的信息
    BOM对象都是作为window对象的属性保存的,所以可以直接在JS中访问这些对象


  • 定时器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    通过定时器,可以使代码在指定时间后执行
    设置定时器的方式有两种
    setTimeout() //一段时间后执行
    参数:
    1.回调函数(要执行的代码)
    2.等待的时间(毫秒)
    关闭定时器:clearTimeout()

    setInterval()//一段时间执行一次
    参数:
    1.回调函数(要执行的代码)
    2.间隔的时间(毫秒)
    关闭:clearInterval()

    <script>
    const timer1 = setTimeout(()=>{
    console.log(1)
    },1000)
    clearTimeout(timer1) //这样写还没执行就关了

    const time2 = setInterval(()=>{
    console.log(2)
    },1000)
    clearInterval(time2)
    </script>

  • 调用栈

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    "事件循环(event loop)"
    函数在每次执行时,都会产生一个执行环境
    执行环境负责存储函数执行时产生的一切数据
    问题:函数的执行环境要存储到哪里呢?
    函数的执行环境存储到了一个叫做调用栈的地方
    "调用栈"(call stack)
    1.调用栈负责存储函数的执行环境
    2.当一个函数被调用时,它的执行环境会作为一个栈帧,插入到调用栈的顶,函数执行完毕其栈帧会自动从中弹出
    3.栈底一开始放的是全局作用域

    "消息队列"
    消息队列负责存储将要执行的函数
    当我们触发一个事件时,其响应函数并不是直接添加到调用栈,因为调用栈中可能有一些还没有执行完的代码
    事件触发后,JS引擎是将事件响应函数插入到消息队列中排队
    "调用栈存储正在执行的,消息队列存储将要执行的"
    btn1.onclick = function () {
    const time = Date.now()
    alert("点击1")
    while (Date.now() - time < 5000){}
    }
    //先点1再点2,2会被阻塞执行,在消息队列中排队
    btn2.onclick = function () {
    alert("点击2")
    }

  • 定时器和消息队列

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    "定时器的本质就是在指定时间后将函数添加到消息队列中"
    <script>
    console.time("执行")
    setTimeout(()=>{
    console.log("定时器执行了")
    //2s后进消息队列,再过3s,5s结束,开始执行
    console.timeEnd("执行") // 5000ms
    },2000)
    const time = Date.now()
    while(Date.now() - time < 5000){}

    setInterval() 每隔一段时间就将函数添加到消息队列中
    但如果函数执行速度较慢,它就无法保证每次执行的间隔相同
    console.time("间隔")
    setInterval(()=>{
    console.timeEnd("间隔")
    alert("定时器执行了")
    console.time("间隔") //点得越快,开始计时越早,越接近3s;
    //点的慢,这次的计时开始和下次计时结束几乎重合,时间就明显小于3s
    },3000)

    //希望函数每次执行都有相同的间隔
    console.time("间隔")
    setTimeout(function fn(){
    console.timeEnd("间隔")
    alert("定时器执行了")
    console.time("间隔")
    //在setTimeout回调函数的最后再调用一个setTimeout
    setTimeout(fn,3000)
    },3000)
    </script>

2024-08-28

  • 图片轮播2

2024-08-29

  • jQuery核心函数
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    核心函数的作用
    两种作用
    1.将它作为工具类使用
    在核心函数中jQuery为我们提供了多个工具方法
    2.将它作为函数使用
    2.1将一个函数作为$的参数
    -这个函数会在文档加载完毕之后执行
    -相当于:
    document.addEventListener("DOMContentLoaded",function())
    2.2将选择器字符串作为参数
    jQuery自动去网页中查找元素
    作用类似于document.querySelectorAll(...)
    注意:
    通过jQuery核心函数查询到的结果并不是原生的DOM对象,
    而是一个经过jQuery包装过的新的对象,这个对象我们称其为jQuery对象
    jQuery对象中为我们提供了很多新的方法,方便我们做各种DOM操作
    但是jQuery对象不能直接调用原生DOM对象的方法
    通常我们为jQuery对象命名时,会使用$开头,加以区分
    2.3DOM对象作为参数
    可以将DOM对象转换为jQuery对象,从而使用jQuery对象的方法
    2.4将html代码作为参数
    会根据html代码来创建元素
    <body>
    <button id="btn01">111</button>
    <script>
    var num = 10
    function fn(){}
    alert($.isFunction(num)) // false
    alert($.isFunction(fn)) // true
    alert(typeof fn === "function") // true
    $(function () {
    $("#btn01").click(function () {
    var btn = document.getElementById("btn01")
    alert(btn) // [object HTMLButtonElement] DOM对象
    var $btn2 = $("#btn01")
    alert($btn2) // [object Object] jquery对象
    alert($(btn)) // [object Object]
    })
    })
    </script>
    </body>

2024-08-30

  • jQuery对象
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    jQuery对象
    -通过jQuery核心函数获取到的对象就是jQuery对象
    -jQuery对象是jQuery中定义的对象
    可以将其理解为是DOM对象的升级版,在jQuery对象中为我们提很多方法,来帮助我们简化DOM操作
    -jQuery对象本质上是一个DOM对象的数组(类数组),可以通过索引获取jQuery对象中的DOM对象
    -当我们修改jQuery对象时,它会自动修改jQuery中的所有元素,这一特点称为jQuery的"隐式迭代"
    -通常情况下,jQuery对象方法的返回值依然是一个jQuery对象所以我们可以在调用一个方法后继续调用其他的 jQuery对象的方法,这一特性,称为jQuery对象的"链式调用"
    <body>
    <button id="btn01">点击</button>
    <ul>
    <li id="swk">孙悟空</li>
    <li id="zbj">猪八戒</li>
    <li>沙和尚</li>
    <li>唐僧</li>
    </ul>
    <script>
    $("#btn01").click(function () {
    var $li = $("li")

    var text = $li.text() // 获取所有li的文本内容 孙悟空猪八戒沙和尚唐僧
    var id = $li.attr("id") // 获取第一个id的属性 swk

    $li.text("新的文本内容").css("color", "red")
    })
    </script>
    </body>

    /*------------------------------------------*/
    <script>
    $(function () {
    $("#btn").click(function () {
    // $(".box1").addClass(["box2","box3"])
    "addClass可以接收回调函数作参数"
    $("div").addClass(function (index, className) {
    // alert(index + "--" + className) // 0--box1 1--box2 2--box3

    //回调函数中,this 指向的是当前元素
    if (index & 1) this.classList.add("box3") //DOM方法
    else $(this).addClass("box2") //jQuery方法
    })
    $("div").addClass(function (index){
    //回调函数的返回值会成为当前元素的 class
    //return ["box2", "box3"]
    if(index & 1)return "box3"
    else return "box2"
    })
    })
    })
    </script>
    /*--------------------------------------------------------*/
    "复制和添加容器"
    $(function () {
    var $swk = $("#list1 li:nth-child(1)").clone() //不加clone,是引用,不是复制,加true能把事件也复制过去
    var $list2 = $("#list2")
    $("#btn").click(function () {
    // $("#list1 li").unwrap("ul") // umwrap() 移除父元素,并返回被移除的元素,父元素是div或不符合条件就不移
    // $("#list1 li").wrap("<div/>") // wrap() 添加包裹元素
    // $("#list1 li").wrapAll("<div/>") // wrapAll() 添加容器,所有元素都包裹在一个元素中
    // $("#list1 li").wrapInner("<div/>") // wrapInner() 添加包裹元素,只包裹内部元素

    $list2.append($swk)
    })
    })

    /*-------------------------------------------------*/
    "添加子元素"
    append() 向父元素后边添加一个子元素
    appendTo() 将子元素添加到父元素后达
    prepend()
    prependTo() 向父元素的前边添加子元素
    text() 获取/设置元素的文本内容
    html() 获取/设置元素的html代码
    $("#box1").append("<div id='box2'/>")
    $("<div id='box2'/>").appendTo("#box1")

    /*---------------------------------------*/
    <input type="radio" name="gender" value="male">男
    <input type="radio" name="gender" value="female">女
    <script>
    // attr() 读取布尔值返回实际值
    // prop() 读取布尔值返回true/false
    // 如果有多个对象,则返回第一个对象
    var $checkedAttr = $("input[name='gender']").attr("checked");
    var $checkedProp = $("input[type='radio']").prop("checked");
    console.log($checkedAttr) // checked
    console.log($checkedProp) // true

    // 修改属性
    $("input[name='gender']").attr("checked",true) // 后设置的优先级高
    </script>

评论