解析页面加载与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日

相关文章

  • javascript动画之模拟拖拽效果篇

    下面我来详细讲解“javascript动画之模拟拖拽效果篇”的完整攻略。 简介 在前端开发中,拖拽是常见的交互效果之一,可以大大提升用户体验。本篇文章将介绍如何用javascript实现模拟拖拽效果。 实现原理 要实现拖拽效果,需要用到鼠标事件(mousedown、mousemove、mouseup),在mousedown事件中获取鼠标的坐标,然后在移动鼠标…

    JavaScript 2023年6月10日
    00
  • JavaScript 正则表达式使用详细参数

    下面是关于“JavaScript 正则表达式使用详细参数”的完整攻略。 正则表达式 正则表达式可以用来匹配符合某个模式的文本。在 JavaScript 中,可以使用 RegExp 对象来创建正则表达式。 RegExp 对象的创建 在 JavaScript 中,可以使用以下两种方式来创建一个正则表达式: 字面量方式 javascript let regExp …

    JavaScript 2023年6月10日
    00
  • Javascript中的高阶函数介绍

    Javascript中的高阶函数介绍 在Javascript中,高阶函数是一种非常常见的函数类型,它们能够接收一个或多个函数作为参数,并且返回一个新的函数。本篇文章将详细讲解高阶函数的基本概念、优点和示例。 高阶函数的基本概念 高阶函数是函数式编程中非常重要的一种概念。根据Javascript的语言特性,任何函数都可以作为参数传递给另一个函数,并且也可以将函…

    JavaScript 2023年5月27日
    00
  • Javascript toExponential 方法

    JavaScript 中的 toExponential() 方法用于将数字转换为指数形式的字符串。该方法返回一个字符串,其中包含指数形式的数字,可以指定小数点后的位数和指数的位数。在本教程中,我们将详细介绍 toExponential() 方法的使用方法。 toExponential() 方法的基本语法如下: number.toExponential(fra…

    JavaScript 2023年5月11日
    00
  • JavaScript文档碎片操作实例分析

    下面我将为您详细讲解“JavaScript文档碎片操作实例分析”的完整攻略。 什么是文档碎片? 文档碎片(DocumentFragment)是在DOM中经常使用的一个API,它代表一个没有父级节点的文档片段,可以包含多个子节点。它的主要功能是在内存中构建DOM节点,然后一次性地将它们添加到页面上,避免了频繁地操作DOM而导致的性能问题。 如何使用文档碎片? …

    JavaScript 2023年6月10日
    00
  • JavaScript 表单处理实现代码

    关于“JavaScript 表单处理实现代码”的详细讲解,本文将分为以下三个部分来介绍。 一、表单处理实现代码的基本知识 在前端开发中,表单的作用是向后端服务器传输数据,因此表单处理是前端开发的核心技术之一。而 JavaScript 是前端开发的主要编程语言之一,它可以很好地与表单交互,实现表单的各种操作。下面是一些常用的表单处理实现代码。 1. 获取表单元…

    JavaScript 2023年6月10日
    00
  • JS字符串按逗号和回车分隔的方法

    下面是JS字符串按逗号和回车分隔的方法的完整攻略: 方法一:使用 split() 函数分隔字符串 使用 split() 函数可以将一个字符串以某个分隔符分隔开,返回由分隔后的子字符串组成的数组。可以将逗号和回车作为分隔符,然后对返回的数组进行处理。 let str = ‘a,b,c\n1,2,3\nx,y,z’; // 带有逗号和回车的字符串 let row…

    JavaScript 2023年5月28日
    00
  • 浅谈JavaScript中数组的增删改查

    应该先给出一个简要的结构: 目录 前言 JavaScript中数组的增删改查 数组创建 数组增加元素 数组删除元素 数组修改元素 数组查询元素 数组循环元素 总结 前言 JavaScript中数组的增删改查是编程中常见的操作之一,掌握这些操作可以让我们更加灵活地处理数据。 JavaScript中数组的增删改查 JavaScript中,数组是一种数据结构,用来…

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