解析页面加载与js函数的执行 onload or ready

解析页面加载与js函数的执行 onload or ready

页面加载过程

当浏览器加载一个页面时,会按照以下步骤逐步完成页面的加载:

  1. 浏览器通过DNS解析获取目标网站的IP地址
  2. 浏览器向服务器发出请求,获取HTML文件
  3. 浏览器开始解析HTML,构建DOM树
  4. 遇到CSS和JS文件时,浏览器会解析它们,并执行其中的代码
  5. 解析完成后,浏览器构建出渲染树
  6. 渲染树和DOM树进行合并,生成最终的页面

JS函数的执行

JS代码在上述第四步会被加载并执行,可通过两种方式来确保JS函数在DOM加载完成后才会执行:onload和ready。

window.onload

window.onload事件表示在网页中的所有元素加载完毕后才会执行,包括图像、嵌入的对象、样式表等。当HTML页面在浏览器窗口中完全渲染,并且所有依赖的资源都已经下载好后,window.onload事件才会被触发。

例如,在以下代码中,在页面以及所有图片都加载完成后,弹出”页面加载完成“的提示框:

window.onload = function() {
  alert("页面加载完成");
};

$(document).ready()

$(document).ready() 是 jQuery 提供的工具,可在 HTML 文档加载完成后进行调用。它表示文档已经加载完毕,并且HTML结构已解析完成,但并不表示所有的嵌入式资源已经加载成功。

例如,在以下代码中,当Dom树以及所有脚本、图片都装载完成之后,弹出”Dom树加载成功“的提示框:

$(document).ready(function() {
  alert("Dom树加载成功");
});

示例说明

示例一

设计一个网站,当用户将GIF图片复制到文本框中时,在新标签页中播放该GIF图。GIF图片在HTML中为img标签,播放GIF需要调用其他JS库。如何确保JS函数不会在HTML解析过程中被执行?

  1. 将img标签包含在一个默认隐藏的div元素中,防止图片加载时对页面渲染的影响。
  2. 在HTML页面底部调用JS库,并确保在dom树全部渲染完成后调用该库。
  3. 使用$(document).ready()函数将用户输入的文本框与JS脚本绑定。

示例代码如下:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>动态播放GIF图片</title>
  <style>
    .hidden {
      display: none;
    }
  </style>
</head>

<body>
  <form>
    <input type="text" id="gif-input" placeholder="输入GIF图片地址">
    <input type="button" value="播放" onclick="playGif()">
  </form>
  <div class="hidden" id="gif-container">
    <img id="preview" />
  </div>
  <script src="jquery.js"></script>
  <script>
    $(document).ready(function () {
      document.getElementById('gif-input').oninput = function () {
        document.getElementById('preview').src = document.getElementById('gif-input').value;
        $('#gif-container').show();
      }
    });
    function playGif() {
      window.open('viewer.html?image=' + encodeURIComponent(document.getElementById('gif-input').value));
    }
  </script>
</body>

</html>

示例二

设计一个网站,当用户点击一个按钮时,弹出画布,在画布上显示一个可移动的小球。如何确保小球画布在HTML加载完成后被渲染?

将JS代码包含在window.onload函数中,防止代码在页面加载过程中被执行。

示例代码如下:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>小球运动动画</title>
  <style>
    canvas {
      border: 1px solid black;
    }
  </style>
</head>

<body>
  <canvas id="canvas" width="200" height="200"></canvas>
  <button onclick="start()">开始</button>
  <script>
    window.onload = function () {
      var canvas = document.getElementById('canvas');
      var context = canvas.getContext('2d');

      var ball = {
        x: 100,
        y: 100,
        vx: 5,
        vy: 4,
        radius: 25,
        color: 'blue',
        draw: function() {
          context.beginPath();
          context.arc(this.x, this.y, this.radius, 0, Math.PI * 2, true);
          context.closePath();
          context.fillStyle = this.color;
          context.fill();
        }
      };

      function start() {
        setInterval(function () {
          context.clearRect(0, 0, canvas.width, canvas.height);
          ball.x += ball.vx;
          ball.y += ball.vy;
          if (ball.x + ball.radius > canvas.width || ball.x - ball.radius < 0) {
            ball.vx = -ball.vx;
          }
          if (ball.y + ball.radius > canvas.height || ball.y - ball.radius < 0) {
            ball.vy = -ball.vy;
          }
          ball.draw();
        }, 16);
      }
    }
  </script>
</body>

</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解析页面加载与js函数的执行 onload or ready - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • js对url进行编码解码的三种方式总结

    下面是关于“js对url进行编码解码的三种方式总结”的详细解释。 1. URL编码 URL编码是将 URL 中非 ASCII 字符的字符转换成 “%” 加上两位十六进制值,即 URL 编码。 在JavaScript中,可以使用 encodeURIComponent() 方法实现 URL 编码。该方法可以将 URL 中所有需要转换的字符都进行转换。 下面是一个…

    JavaScript 2023年5月20日
    00
  • js中判断Object、Array、Function等引用类型对象是否相等

    JavaScript 中判断对象是否相等比较复杂,因为对象具有引用类型的特性,即两个变量即使引用同一个对象,它们也不一定相等。 以下是一些常见的判断方法和示例: 1. 使用 Object.is() 方法 Object.is() 方法可以判断两个对象是否相等,与 === 操作符相似。它的返回值为一个布尔值。 以下是示例代码: const obj1 = { a:…

    JavaScript 2023年6月11日
    00
  • JavaScript利用canvas实现鼠标跟随特效

    实现鼠标跟随特效,通常使用的是JavaScript中的Canvas技术,下面我来详细讲解如何实现这样一个特效,具体步骤如下: 步骤一:获取元素 首先,我们需要获取需要操作的元素,通常是一个包含设计特效的区域,可以使用document.getElementById()或document.querySelector()方法进行获取。比如: const canva…

    JavaScript 2023年6月11日
    00
  • JS创建对象的写法示例

    以下是关于JS创建对象的写法示例的完整攻略: 什么是JS对象 JS中的对象指的是一组键值对的集合。它们通过点号或中括号访问。 1.对象字面量创建对象 // 通过字面量的方式创建一个对象 const obj = { name: "Lena", age: 25, gender: "female", sayHi: funct…

    JavaScript 2023年5月27日
    00
  • connection reset by peer问题总结及解决方案

    Connection reset by peer问题总结及解决方案 问题描述 在使用网络进行数据传输时,有时候可能会遇到“connection reset by peer”的问题。这个问题表示在和远程主机通信时,远程主机强制关闭了连接。 问题原因 导致“connection reset by peer”问题的原因有很多。以下是几个可能的原因: 网络故障:有时…

    JavaScript 2023年5月27日
    00
  • javaScript操作字符串的一些常用方法

    下面我来为您详细讲解“JavaScript操作字符串的一些常用方法”的完整攻略。 目录 字符串的创建与基本操作 常用操作方法 2.1 字符串查找方法 2.2 字符串替换方法 2.3 字符串切割方法 2.4 字符串转化方法 2.5 字符串大小写转换方法 2.6 字符串的比较方法 1. 字符串的创建与基本操作 在JavaScript中,可以使用单引号或双引号来创…

    JavaScript 2023年5月18日
    00
  • JS实现的进制转换,浮点数相加,数字判断操作示例

    JS实现的进制转换攻略: 对于进制转换,JS提供了parseInt和toString方法。其中parseInt方法可将其他进制的数字转换为十进制,toString方法可将十进制数字转换为其他进制。 示例说明1:将十六进制数字转换为十进制 let hex = "3A"; let dec = parseInt(hex, 16); consol…

    JavaScript 2023年5月28日
    00
  • Javascript模块化编程详解

    Javascript模块化编程详解 Javascript模块化编程是一种将复杂的Javascript程序分解为小、互相独立的代码块的方法,使得代码更易于理解、维护和复用。常用的Javascript模块化工具包括:CommonJS, AMD, ES6模块等。下面将分缘模块化开发的准备、模块化的第一步:使用IIFE(立即执行的函数表达式)封装代码、模块化的第二步…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部