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

yizhihongxing

解析页面加载与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+HTML5实现的可调节写字板功能示例

    下面是我对于“原生JS + HTML5 实现的可调节写字板功能示例”的攻略详解,包括过程和示例说明: 1. 准备工作 首先,我们需要明确一下目标:实现一个可调节写字板的功能。为此,我们需要对写字板功能的实现进行详细的分析,并列出需要用到的相关技术和工具。 1.1 写字板需求分析 写字板的基本要求是:用户可以在一个空白画布上自由绘画,还可以设置画笔的颜色及粗细…

    JavaScript 2023年5月28日
    00
  • 一个不错的js html页面倒计时可精确到秒

    下面是“一个不错的JS HTML页面倒计时可精确到秒”的完整攻略。 1.准备工作 首先,要获取当前时间和未来的结束时间,并计算出两者之间的时间间隔。为了完成这个任务,我们需要使用JavaScript中的Date对象。 // 获取当前时间 var now = new Date(); // 获取未来结束时间 var end = new Date(‘2021/12…

    JavaScript 2023年5月27日
    00
  • typescript难学吗?前端有必要学?该怎么学typescript

    一、 TypeScript 简介TypeScript 是 JavaScript 的超集,为 JavaScript 添加了静态类型、类、接口、命名空间等功能。TypeScript 还可以编译成纯 JavaScript,因此可以在任何浏览器、任何计算机和任何操作系统上执行。 二、 TypeScript 学习难度相对于纯 JavaScript,TypeScript…

    JavaScript 2023年5月27日
    00
  • jquery validate添加自定义验证规则(验证邮箱 邮政编码)

    以下是关于jquery validate添加自定义验证规则的完整攻略。 什么是jquery validate? jQuery validate是一个基于jQuery的表单验证插件,它可以对表单中的各类数据进行校验,从而帮助我们减少了客户端数据校验的代码量,提高了开发效率。 如何添加自定义验证规则? jquery validate插件提供了丰富的内置验证规则,…

    JavaScript 2023年6月10日
    00
  • thinkphp3.x中display方法及show方法的用法实例

    下面我将为你详细讲解”thinkPHP3.x中display方法及show方法的用法实例”的完整攻略。 一、display方法的用法 在thinkPHP中,display方法可以用来显示模板文件,当你调用display方法时,系统默认会去找位于View目录下的相应视图文件进行模板渲染,这个方法主要有两个参数: display($templateFile=”…

    JavaScript 2023年5月19日
    00
  • 分享几个JavaScript运算符的使用技巧

    让我来详细讲解一下“分享几个JavaScript运算符的使用技巧”的攻略。 标题 分享几个JavaScript运算符的使用技巧 代码块 在 JavaScript 中,有很多运算符可以帮助我们进行数据处理和逻辑运算。下面我就来分享几个常用的运算符,并介绍一些使用技巧。 一、 空值合并运算符 空值合并运算符 ?? 用于确定变量或表达式是否为未定义或空值(null…

    JavaScript 2023年5月27日
    00
  • jQuery拖拽 & 弹出层 介绍与示例

    下面我将详细讲解“jQuery拖拽 & 弹出层 介绍与示例”的完整攻略。本攻略包含以下四个主要部分: jQuery拖拽的介绍 jQuery拖拽的实现方法 jQuery弹出层的介绍 jQuery弹出层的实现方法 1. jQuery拖拽的介绍 jQuery拖拽是指在页面中,用鼠标来拖拽页面上的元素,实现元素的位置移动效果。jQuery拖拽非常常见,尤其是…

    JavaScript 2023年6月11日
    00
  • js鼠标点击图片实现随机变换图片的方法

    下面我来详细讲解一下“js鼠标点击图片实现随机变换图片的方法”的完整攻略。 1.准备工作 在开始实现之前,我们需要准备好一些资源,例如要使用的图片以及相应的代码框架。具体步骤如下: 1.1 准备图片资源 首先,我们需要准备一些图片资源。为了节省时间和便于操作,我们可以选择一些预设好的图片资源,例如https://picsum.photos/ 网站上提供的随机…

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