Vue MVVM这一篇就够啦!_vue r mvvm-CSDN博客
----------------------------------------------------------------------- css .icon { border: 1px solid transparent; /* 透明边框,用于确保图标始终有边框 */ /* 其他样式 */ } --------------------------------------------------------------------- js // 获取容器和图标 var container = document.getElementById('container'); var icons = container.querySelectorAll('.icon'); // 为每个图标添加点击事件 icons.forEach(function(icon) { icon.addEventListener('click', function(e) { // 阻止事件冒泡到容器(可选,取决于你的具体需求) // e.stopPropagation(); // 将图标的边框设置为红色 this.style.border = '1px solid red'; }); }); // 为容器添加点击事件,用于重置图标边框 container.addEventListener('click', function(e) { // 检查点击的目标是否不是图标 if (!e.target.matches('.icon')) { // 重置所有图标的边框 icons.forEach(function(icon) { icon.style.border = ''; // 或者设置为默认边框样式 }); } }); // 注意:如果容器内还有其他非图标元素,并且你希望点击这些元素时也重置图标边框, // 那么你可能需要调整上述条件检查,或者为这些元素也添加点击事件监听器。
const data = {}; const input = document.getElementById( 'input ' ); 0bject.defineProperty(data,'text', { set(value) { input.value = value ; this .value = value; } }); input.onChange = function(e) {data.text = e.target .value;}
class StorageSingleton { // 静态私有变量,用于存储实例 static instance = null; // 私有构造函数,防止外部直接实例化 private constructor() {} // 静态方法,用于获取实例 static getInstance() { if (!this.instance) { this.instance = new StorageSingleton(); } return this.instance; } // 封装setItem方法 setItem(key, value) { try { // 调用localStorage的setItem方法 localStorage.setItem(key, value); } catch (error) { console.error('Failed to set item in localStorage:', error); } } // 封装getItem方法 getItem(key) { try { // 调用localStorage的getItem方法 return localStorage.getItem(key); } catch (error) { console.error('Failed to get item from localStorage:', error); return null; // 或者根据需要返回特定的错误值 } } // (可选)可以添加其他localStorage操作方法 } // 使用示例 const storage = StorageSingleton.getInstance(); storage.setItem('username', 'JohnDoe'); console.log(storage.getItem('username')); // 输出: JohnDoe // 再次尝试获取实例,仍然是同一个实例 const anotherStorage = StorageSingleton.getInstance(); console.log(anotherStorage === storage); // 输出: true
浏览器工作原理与Javascript高级(前后端异步)-CSDN博客
Javascript事件循环应用—nextTick()详解_js nexttick-CSDN博客
首先,js 是单线程的,主要的任务是处理用户的交互,而用户的交互无非就是响应DOM的增删改,使用事件队列的形式,一次事件循环只处理一个事件响应,使得脚本执行相对连续,所以有了事件队列,用来储存待执行的事件,那么事件队列的事件从哪里被push进来的呢。那就是另外一个线程叫事件触发线程做的事情了,他的作用主要是在定时触发器线程、异步 HTTP请求线程满足特定条件下的回调函数 push到事件队列中,等待js 引擎空闲的时候去执行,当然js引擎执行过程中有优先级之分,首先js引擎在一次事件循环中,会先执行js线程的主任务,然后会去查找是否有微任务
microtask ( promise),如果有那就优先执行微任务,如果没有,在去查找宏任务macrotask ( setTimeout、setInterval)进行执行
JavaScript 中使用 Canvas 绘制图片时遇到的跨域问题(CORS, Cross-Origin Resource Sharing)主要是因为浏览器安全策略的限制。这些策略旨在保护用户的数据安全,防止恶意网站读取用户设备上存储的敏感信息,如图片等。
当你尝试在 Canvas 上绘制一个来自不同源(域名、协议或端口不同)的图片时,浏览器会首先检查这个图片是否允许跨域访问。这是因为 Canvas 的强大功能(如 toDataURL()
或 toBlob()
方法)可以将 Canvas 的内容转换为图像文件,这可能会涉及到用户隐私的泄露,特别是如果 Canvas 绘制了来自不同源的敏感图片。
从在浏览器中输入URL到最终看到页面的全过程是一个复杂且多步骤的过程,涉及到了网络协议、浏览器解析、渲染引擎等多个组件的协同工作。下面我将尽量详细地描述这个过程:
标签中的样式),构建出CSS对象模型(CSSOM)树。DOMContentLoaded
事件。load
事件。以上就是从输入URL到看到页面发生的全过程。这个过程涉及了多个环节和组件的协同工作,每个环节都可能对页面的加载速度和渲染效果产生影响。
【浏览器篇】4.渲染引擎执行原理_哔哩哔哩_bilibili
https://segmentfault.com/a/1190000013396601
前端面试的一道算法题(使用canvas解答) - 简书