首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js 加载css 判断完成

在JavaScript中加载CSS并判断其是否完成加载是一个常见的需求,尤其是在需要确保样式表完全加载后再执行某些操作时。以下是关于这个问题的基础概念、相关优势、类型、应用场景以及解决方案的详细解答。

基础概念

  • CSS加载:浏览器解析HTML文档时,遇到<link>标签或@import规则会开始加载外部CSS文件。
  • 加载完成事件:CSS文件被下载并应用到DOM上的过程完成后触发的事件。

相关优势

  1. 确保样式一致性:在CSS加载完成后再执行JavaScript可以避免因样式未加载导致的布局闪烁或样式错误。
  2. 性能优化:可以合理安排脚本执行顺序,提高页面加载效率。

类型与应用场景

  • 内联样式:直接在HTML标签中使用style属性。
  • 外部样式表:通过<link>标签引入外部CSS文件。
  • JavaScript动态加载:使用JavaScript动态创建<link>元素并插入到DOM中。

应用场景包括但不限于:

  • 动态主题切换。
  • 页面初始化时的样式依赖处理。
  • 第三方库或组件的样式加载。

解决方案

以下是几种常见的方法来判断CSS是否加载完成:

方法一:监听load事件

代码语言:txt
复制
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'path/to/your/stylesheet.css';

link.onload = () => {
  console.log('CSS loaded successfully');
};

link.onerror = () => {
  console.error('Failed to load CSS');
};

document.head.appendChild(link);

方法二:使用onreadystatechange

对于IE浏览器,可以使用onreadystatechange事件:

代码语言:txt
复制
const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'path/to/your/stylesheet.css';

link.onreadystatechange = function() {
  if (this.readyState === 'loaded' || this.readyState === 'complete') {
    console.log('CSS loaded');
    link.onreadystatechange = null;
  }
};

link.onload = () => {
  console.log('CSS loaded successfully');
};

link.onerror = () => {
  console.error('Failed to load CSS');
};

document.head.appendChild(link);

方法三:轮询检查样式是否应用

通过定时器不断检查某个元素的样式是否已更改,以此判断CSS是否加载完成:

代码语言:txt
复制
function checkStyleApplied(selector, property, value, callback) {
  const element = document.querySelector(selector);
  if (element && element.style[property] === value) {
    callback();
  } else {
    setTimeout(() => checkStyleApplied(selector, property, value, callback), 100);
  }
}

const link = document.createElement('link');
link.rel = 'stylesheet';
link.href = 'path/to/your/stylesheet.css';

link.onload = () => {
  checkStyleApplied('.your-element', 'color', 'blue', () => {
    console.log('CSS applied and element style is correct');
  });
};

link.onerror = () => {
  console.error('Failed to load CSS');
};

document.head.appendChild(link);

总结

以上方法各有优劣,选择合适的方法取决于具体的应用场景和浏览器兼容性需求。通常情况下,监听load事件是最简单直接的方式,而在需要兼容旧版IE的场景下,则可能需要结合使用onreadystatechange事件。轮询检查虽然较为繁琐,但在某些特定情况下可能是唯一可行的方案。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JS判断单、多张图片加载完成

在实际的运用中有这样一种场景,某资源加载完成后再执行某个操作,例如在做导出时,后端通过打开模板页生成PDF,并返回下载地址。...试想,如果模板中有图片,此时如何判断图片是否加载完成? 在此之前来了解一下jquery的ready与window.onload的区别,ready只是dom结构加载完毕,便视为加载完成。...$(document).ready(function(){ //jquery $('#xiu').load(function(){ // 加载完成 });.../uploads/2014/11/hs-xiu.jpg' xiu.onload = function(){ // 加载完成 } (3)、单张图片(结合ES6 Promise) //js...前端性能优化常见方法 一小时内搭建一个全栈Web应用框架 干货:CSS 专业技巧 四步实现React页面过渡动画效果 让你分分钟理解 JavaScript 闭包 ---- 小手一抖,资料全有。

12.5K20
  • 按需加载js和css

    博客上有一个用mediaelement-and-player.js弄的播放器,插件默认的是每个页面都加载一次mediaelement-and-player.min.js和mediaelementplayer.min.css...首先往后端的方向去想,由于不知道typecho的js是怎么管理的,似乎在插件的激活方法中就开始往模板输出js和css了,我要的是在分析文章的过程中决定要不要输出那个js,所以要从后端来着手去搞的话难度很大...于是我往前端去思考,我们都知道html网页都是由dom组成的,假如我们判断到可以加载播放器的时候再让它document.write()出那个代码同也就能实现这个功能,而且对后端没什么影响。...基本思路:header部分声明一个默认为false的变量,当网页中有播放器时候把它赋值为true,底部根据这个变量的值来决定是否输出播放器的js和css。...这样那些用不上的js就不会加载啦,网页加载速度也会快不少。 不知道css放在页面底部会不会有什么副作用,目前还没遇到什么问题,望大神指点迷津。 不过我觉得这种方式应该是最愚蠢的╮(╯▽╰)╭

    2.8K20

    js判断iframe加载是否成功的方法

    今天木槿来探讨一下js判断iframe加载是否成功的方法,并且兼容多种浏览器。...这时,我们就要考虑是否可以等iframe加载完后再执行后边的操作,当然,各种浏览器早就为我们考虑到啦,看下面:ie浏览器IE的每个elem节点都会拥有一个onreadystatechange事件,这个事件每次在...添加一个 onreadystatechangeiframe.attachEvent("onreadystatechange", function(){//此事件在内容没有被载入时候也会被触发,所以我们要判断状态...;其他浏览器:Firefox,Opera,chrome等在其他非IE的浏览器上 Firefox,Opera,chrome等 iframe 都会拥有一个 onload 事件,此事件只要触发就说名内容已经加载完毕...(iframe.attachEvent){iframe.attachEvent("onreadystatechange", function() {//此事件在内容没有被载入时候也会被触发,所以我们要判断状态

    2K20

    wkwebview加载完成_【Swift】WKWebView与JS的交互使用

    WKWebView 支持更多的HTML5的特性 高达60fps滚动刷新频率与内置手势 与Safari相容的JavaScript引擎 在性能、稳定性方面有很大提升占用内存更少 协议方法及功能都更细致 可获取加载进度等...textField.text = defaultText } alertViewController.addAction(UIAlertAction(title: "完成...) })) self.present(alertViewController, animated: true, completion: nil) } 4、获取网页中节点的数据 //网页加载完成...document.getElementsByClassName();//类名 document.getElementsByName();//name属性值,一般不用 document.querySelector();//css...选择符模式,返回与该模式匹配的第一个元素,结果为一个元素;如果没找到匹配的元素,则返回null document.querySelectorAll()//css选择符模式,返回与该模式匹配的所有元素,结果为一个类数组

    5.7K00

    分享个通过CSS让JS判断屏幕宽度的方法

    因为最近几天给主题加了视频背景,考虑到手机端是不显示背景的,既然不显示就想着视频资源最好也别加载,给手机端省点流量,于是乎想了个骚气的判断方式。...教程 首先给css部分加入如下代码,其中使用媒体查询设置了5个断点,一般常见框架断点都是这样的,默认content的值是0,随着屏幕宽度的变化分别赋值1-5。...html { content: "4"; } } @media (min-width: 1536px) { html { content: "5"; } } 然后我们使用下方的js...获取这个值,最后使用if语句判断值大于某数值时才会执行某些操作,比如我就是判断值大于等于4时才会把视频地址赋值给video标签。...框架实现不同屏幕下执行不同js函数。

    2.4K20

    WordPress移除head头部js、css、feed等多余加载项

    在我们开发WordPress主题时,细心的小伙伴或发现网站头部如果加载head页面就会出现很多系统自带的加载项目,例如自带的css、js、feed、style等多余信息。...这些加载项目很多是没有必要加载的,那么我们如何将这些多余的head头部信息移除呢? 方法很简单,网上针对此类WordPress优化的教程也很多,今天WPTOO教程网就给大家整理下。...我们先看看移除多余加载项之前的代码截图 解决方法 //去除头部多余加载信息 remove_action( 'wp_head', 'wp_generator' );//移除WordPress版本 remove_action...css remove_action( 'wp_head', 'print_emoji_detection_script', 7 );//移除emoji载入js remove_action( 'admin_print_scripts...' );//移除emoji载入css remove_action( 'admin_print_styles', 'print_emoji_styles' ); remove_action( 'wp_head

    2.6K20
    领券