介绍前,先说下背景。在前端开发中,有时会为页面绑定 resize 事件,或者为一个页面元素绑定拖拽事件(其核心就是绑定 mousemove),这种事件有一个特点,就是用户不必特地捣乱,他在一个正常的操作中,都有可能在一个短的时间内触发非常多次事件绑定程序。而大家知道,DOM 操作时很消耗性能的,这个时候,如果你为这些事件绑定一些操作 DOM 节点的操作的话,那就会引发大量的计算,在用户看来,页面可能就一时间没有响应,这个页面一下子变卡了变慢了。甚至在 IE 下,如果你绑定的 resize 事件进行较多 DOM 操作,其高频率可能直接就使得浏览器崩溃。
《parctical common lisp》的作者曾说,如果你需要一种模式,那一定是哪里出了问题。他所说的问题是指因为语言的天生缺陷,不得不去寻求和总结一种通用的解决方案。
不管是弱类型或强类型,静态或动态语言,命令式或说明式语言、每种语言都有天生的优缺点。一个牙买加运动员, 在短跑甚至拳击方面有一些优势,在练瑜伽上就欠缺一些。
去年年前当时正在开发 dev.qplus.com, 有个存储应用分类 id 的 js 文件, 分类 id 的结构最开始设计的比较笨重. 于是我决定重构它. 我把它定义成一个 json 树的形式, 大概是这样:
观察者模式 ( 又叫发布者-订阅者模式 ) 应该是最常用的模式之一. 在很多语言里都得到大量应用. 包括我们平时接触的 dom 事件. 也是 js 和 dom 之间实现的一种观察者模式.
1 2 3 4 5 |
div.onclick = function click (){ alert ( ''click' ) } |
简单工厂模式是由一个方法来决定到底要创建哪个类的实例, 而这些实例经常都拥有相同的接口. 这种模式主要用在所实例化的类型在编译期并不能确定, 而是在执行期决定的情况。 说的通俗点,就像公司茶水间的饮料机,要咖啡还是牛奶取决于你按哪个按钮。
简单工厂模式在创建 ajax 对象的时候也非常有用.
之前我写了一个处理 ajax 异步嵌套的库,地址在 https://github.com/AlloyTeam/DanceRequest
通常情况 CSS 不论是内嵌还是外联,都是预先定义好的。其实利用 JavaScript,我们也可以动态在页面中插入或删除 CSS。
比较常见的场景是:CSS 动画。由于我们在设计网页时不能预知动画的具体细节,所以需要在运行时进行定制。比如,我们想让一个元素从右侧飞出屏幕,如果用 keyframe 动画实现,我们必须知道屏幕的宽度,这个信息只有在运行才知道。
例如下面的 1026px,是运行时浏览器窗口的宽度。
【场景】:
由于 CodeTank 是一个 JS 的编程游戏,所以用户的代码都可以在 CodeTank 平台上执行,从而控制 tank 的个性化行为。
在 CodeTank 设计之初,主要需要实现的目标如下:
此方案已有新版本, 请查看 《iframe 跨域通信的通用解决方案-第二弹!(终极解决方案)》。本文章可做技术学习供继续交流。
一、背景
在这个 Web 页面越来越丰富的时代,页面通过 iframe 嵌入其他的页面也越来越常见。但由于浏览器同源策略的限制,不同域之间属性和操作是无法直接交互的,所以在这个时候,开发者多多少少需要一些方案来突破这些限制。跨域问题涉及的地方也很多,如文档之间的消息通信、ajax 请求、Cookie 等,本文讨论的是 iframe 和父页面的消息通信。
Copyright © 2011-2021 AlloyTeam. All Rights Reserved. Powered By WordPress
粤ICP备15071938号-2