- 浏览: 1466431 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
luhouxiang:
写的很不错,学习了
Extjs 模块化动态加载js实践 -
kingkongtown:
如果想改成淘宝后台那样,可以在编辑器批量上传图片呢?
kissy editor 阶段体会 -
317966578:
兄弟我最近也在整jquery和caja 开放一些接口。在git ...
caja 原理 : 前端 -
liuweihug:
Javascript引擎单线程机制及setTimeout执行原 ...
setTimeout ,xhr,event 线程问题 -
辽主临轩:
怎么能让浏览器不进入 文档模式的quirks模式,进入标准的
浏览器模式与文本模式
引:
看了一下 YUI 源码架构,发现似乎没有像 Extjs 一样存在一个模版模块,如Ext.template ,而是大量利用了浏览器提供的克隆功能,如同原型设计模式般得到相似的组件(节点)实例,而不用每次重复构建相同的DOM节点,实际也是一种模版思路。
实战:
在这个思想下,我尝试实验一个基于clone模版的阴影功能 :
阴影即是在一块区域后面的一片灰色区域,做的好的话还可以圆角边等花样,看一下 windowlite :采用 extjs 的阴影样式而构建圆角阴影:
原理即是在window 层下放一 div 里面元素组成圆角背景,略大于 window,从而透出 window 形成阴影边框。
阴影层实现 html 代码:
<div class="x-shadow" id="ext-gen58" style="z-index: 10000; left: 593px; top: -277px; width: 587px; height: 298px; display: block;"> <div class="xst"> <div class="xstl"> <div class="xstc" style="width: 575px;"> <div class="xstr"> </div> <div class="xsc" style="height: 286px;"> <div class="xsml"> <div class="xsmc" style="width: 575px;"> <div class="xsmr"> </div> <div class="xsb"> <div class="xsbl"> <div class="xsbc" style="width: 575px;"> <div class="xsbr"> </div> </div>
其中 width,height 根据window 的大小而动态调整。
若以 extjs 一类的模版实现,可将此段html设为模版,大小位置参数填充,不同的window,根据该模版填充参数创建不同的阴影层即可。
cloneNode 模版:
若采用 clone 的原型设计,可以页面开始就建立该层(原型层),不同的window建立时,只需 clone 原型层,并修改相应的属性即可,程序更方便简单。
步鄹
1.页面开始原型层建立
<div class="x-shadow" id="shadowTemplate" style="z-index: 10000; left: -9999px; top: -9999px; display:block;"> <div class="xst"> <div class="xstl"></div> <div class="xstc"></div> <div class="xstr"></div> </div> <div class="xsc"> <div class="xsml"></div> <div class="xsmc"></div> <div class="xsmr"></div> </div> <div class="xsb"> <div class="xsbl"></div> <div class="xsbc"></div> <div class="xsbr"></div> </div> </div>
2.每次 window 建立 需要新的原型层时克隆原型层,并修改相应属性
//克隆原型层 function createShadow(style){ var s1=Ext.getDom("shadowTemplate").cloneNode(true); s1.id="s"+Ext.id(); Ext.fly(s1).setStyle(style); var width=Ext.fly(s1).getComputedWidth()-12, height=Ext.fly(s1).getComputedHeight()-12; var h1=Ext.fly(s1).child(".xstc",true), h2=Ext.fly(s1).child(".xsbc",true), h4=Ext.fly(s1).child(".xsmc",true), h3=Ext.fly(s1).child(".xsc",true); h1.style.width=width+"px"; h2.style.width=width+"px"; h4.style.width=width+"px"; h3.style.height=height+"px"; return s1; } Ext.onReady(function(){ var s1=createShadow({ display:"block", left:"10px", top:"10px", width:"100px", height:"100px" }); Ext.getBody().dom.appendChild(s1); var s1=createShadow({ display:"block", left:"10px", top:"210px", width:"100px", height:"100px" }); Ext.getBody().dom.appendChild(s1); });
3.将克隆后的层DOM节点插入到合适位置即可。
实践2:
tabpanellite 中支持两种使用方式
1。直接从markup中渐进增强过来
2。完全由javascript生成一切
对于2,使用模版节点的做法:
Ext.ux.TabPanelLite.template = function() { var holder = document.createElement("div"); holder.className="tabpanel"; holder.innerHTML = "" + "<div class='tabheader'>" + "<ul class='tabpanel_nav clearfix'><ul></div><div class='panels'></div>"; return { getSkeleton: function() { return holder.cloneNode(true); }, getPanel: function() { var p = document.createElement("div"); p.className = "panel"; return p; }, getTab: function(active) { var li = document.createElement("li"); li.innerHTML = "" + "<a class='tab_left' href='#' hideFocus='on'>" + " <em class='tab_right'>" + " <span class='tab_inner'>" + " <span class='tab_text'>??" + " </span>" + " </span>" + " </em>" + " </a>"; return li; } }; } ();
发表评论
-
模块化高扩展性的前端框架 KISSY
2013-03-14 14:58 8637模块化高扩展性的前端框架 KISSY 注:本文为 2 ... -
构建前端 DSL
2012-10-11 22:10 5375目前在传统的软件开 ... -
KISSY kisses bootstrap navbar
2012-08-03 01:12 6061看了下 bootstrap 的导航菜单,立刻非常喜欢,注意是浅 ... -
promise api 与应用场景
2012-02-07 17:34 7404promise 是 commonjs 社区中提出的异步规范,其 ... -
unified event model
2011-10-14 23:02 1792为了处理原生事件在各 ... -
转载:瀑布流布局浅析
2011-09-29 19:02 2856简介 如果你经 ... -
cross domain request
2011-09-29 18:39 2855场景 跨域请求是随着 ... -
基于多继承的树设计
2011-09-18 03:42 2274分类 树是一种常见 ... -
caja 原理 : 前端
2011-09-01 16:48 7081作为前端开放的基础安全保证,caja 是目前比较合 ... -
ie 下 cloneNode 导致的属性克隆
2011-08-24 16:10 2486这个还是很值得记下,一直存在的很大隐患终于解决,由于在 ie& ... -
just another event model
2011-06-08 20:47 2174事件模型也算是客户端兼容性的一个长期问题,早期 jquery ... -
框架 build 系统介绍
2010-07-11 01:29 1665一个复杂的类库通常都包括很多子模块( jquery@git ... -
querySelectorAll 探讨
2010-07-01 22:35 5266随着css selector engine在越来越多的java ... -
再谈 attribute
2010-06-22 11:37 2685@slideshare 原生: ... -
事件机制探讨
2010-06-21 13:54 2247由于浏览器事件机制的不兼容性,譬如最常见的注册事件差异 ... -
利用Attribute重构:业务与UI分离
2010-06-08 16:54 1595很简单的一个应用 通过按钮来限制输入范围 ,这样的话再 ... -
yui3 loader的串行加载特性
2010-06-04 12:30 1818yui3 的沙箱机制可以在 ... -
yui3下的load事件触发
2010-06-01 13:31 3250以前的一些总结:页面l ... -
理解YUI3 extension:Base.create
2010-05-31 03:01 2009YUI3中为了避免不必要的类继承层次,以及摆脱利用原型链模拟的 ... -
google WebFont Loader 源码阅读
2010-05-22 01:04 2792资料: 关于新发 ...
相关推荐
### JavaScript 拷贝节点cloneNode()使用介绍 在JavaScript中,`cloneNode()`方法是DOM(Document Object Model)操作中的一个重要功能,主要用于复制(克隆)DOM树中的节点及其属性。这对于创建复杂的用户界面或者...
javascript cloneNode()方法的使用 javascript 中的 cloneNode() 方法是用来克隆一个元素的,包括其所有子元素和属性。该方法返回克隆的元素,并且可以选择是否克隆元素的所有子元素。 在上面的实例代码中,我们...
JavaScript提供了一种简单有效的方法来实现这一点,那就是使用DOM(文档对象模型)中的cloneNode方法。cloneNode方法允许我们复制已有的节点,并且可以选择是否复制节点的子节点,即深拷贝或浅拷贝。 为了理解...
在网页开发过程中,DOM操作是不可或缺的一部分,其中`cloneNode`方法用于复制DOM节点及其子节点。然而,当在Internet Explorer(尤其是版本8及以下)中使用`cloneNode`时,需要注意一些特定的行为,这些行为可能导致...
在JavaScript中,DOM(文档对象模型)操作是实现网页动态交互的基础,而`cloneNode`方法是DOM操作中用于克隆节点的一个重要函数。了解`cloneNode`以及它在克隆文本节点时的使用技巧,对于进行DOM操作的前端开发者来...
cloneNode(a)方法接受一个布尔值参数,表示是否深拷贝 true:表示执行深拷贝,复制本节点以及整个子节点树. false:浅拷贝.只复制节点本身. 复制后返回的节点副本属于文档所有,但是并没有父节点.除非使用appendChild,...
本文实例讲述了DOM节点深度克隆函数cloneNode()用法。分享给大家供大家参考。 具体实现方法如下: 代码如下:<html> <head> [removed] function t(){ var nodeul = document.getElementsByTagName(...
这里我们要讨论的是一个与`cloneNode`方法相关的bug,尤其在处理Form节点时可能会遇到。 `cloneNode`是DOM操作中的一个重要函数,它用于复制一个节点及其所有子节点。在大多数情况下,这个方法在不同浏览器间表现...
`cloneNode`方法就是JavaScript中用于复制DOM节点的一个重要工具,它可以让我们轻松地实现表格的增加和删除功能。下面我们将深入探讨`cloneNode`方法以及如何用它来实现上述的效果。 首先,`cloneNode`是DOM API中...
通过阅读和分析这些文件,你可以了解如何从头构建一个基于Web组件的应用程序,理解香草JavaScript和Shadow DOM在实际项目中的应用。这不仅有助于提升Web开发技能,也有利于适应不断变化的前端技术趋势。
WC-TodoApp是一个用于学习Web组件的项目,它基于JavaScript技术构建。Web组件是现代Web开发中的一个重要概念,它允许开发者创建可复用、自包含的UI元素,从而提高代码的模块化和可维护性。在本文中,我们将深入探讨...
- 创建可复用的组件:在前端开发中,有时我们需要创建多个相似的元素,如列表项,这时可以先创建一个模板,然后通过克隆生成多个副本。 - 动画效果:在某些动画效果中,如粒子效果,可以利用克隆技术来生成大量节点...
shadowRoot.appendChild(template.content.cloneNode(true)); } } ``` 四、生命周期方法 自定义元素有多个生命周期回调,如`constructor`、`connectedCallback`、`disconnectedCallback`等,它们在元素的不同状态...
shadowRoot.appendChild(template.content.cloneNode(true)); // 在这里可以获取到Shadow DOM中的元素并进行操作 } ``` 4. **添加功能**: 自定义元素可以扩展其功能,如响应式布局、自定义控制按钮、视频流切换...