jQuery 对象文字模式
jQuery Object Literal Pattern
为了编写更干净的代码,我决定学习一些设计模式。我真的很喜欢对象文字模块模式,但我遇到了一些麻烦。我在意大利面条代码中创建了一个灯箱,但无法将其转换为对象文字模式。
var $overlay = $("<div class='lightbox'></div>");
var $img = $("<img>");
var $caption = $("<p class='caption'></p>");
$overlay
.append($img)
.append($caption);
$('body').append($overlay);
$('.gallery li').click(function (e) {
e.preventDefault();
var src = $(this).children('img').attr("src");
var cap = $(this).children('img').attr("alt");
$img.attr('src',src);
$caption.text(cap);
$overlay.fadeIn('fast');
$overlay.click(function () {
$overlay.fadeOut('fast');
});
});
我已经使用与帖子链接的相同结构将代码重构为对象文字。所有创建的元素都位于 lightbox.el
命名空间中,您可以使用 lightbox.init()
启动灯箱。
var lightbox = {
el: {
overlay: $("<div class='lightbox'></div>"),
img: $("<img>"),
caption: $("<p class='caption'></p>"),
galleryItems: $('.gallery li'),
body: $('body')
},
fadeSpeed: 'fast',
init: function(){
lightbox.append();
lightbox.bindUIActions();
},
bindUIActions: function(){
lightbox.el.galleryItems.click(lightbox.handleGalleryClick);
},
handleGalleryClick: function(e){
e.preventDefault();
var src = $(this).children('img').attr("src");
var cap = $(this).children('img').attr("alt");
lightbox.el.img.attr('src',src);
lightbox.el.caption.text(cap);
lightbox.el.overlay.fadeIn(lightbox.fadeSpeed);
lightbox.el.overlay.click(lightbox.fadeOutOverlay);
},
fadeOutOverlay: function(){
lightbox.el.overlay.fadeOut(lightbox.fadeSpeed);
},
append: function(){
lightbox.el.overlay
.append(lightbox.el.img)
.append(lightbox.el.caption);
lightbox.el.body.append(lightbox.el.overlay);
}
}
用法:
lightbox.init();
相关文章:
- 添加文字和评论功能更新Div
- Javascript,访问一个主要对象模块模式中的每个对象
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- D3.js模式不适用于弧形或圆环图
- Javascript 文字对象和单例模式
- jQuery 对象文字模式
- 为什么在严格模式下不允许使用八进制数字文字(解决方法是什么?)
- 对象文字模式在asp.net中的OnClick事件
- 严格模式下不允许对象文字中重复的数据属性
- 每x秒调用一次jQuery函数(对象文字模式)
- 调试用对象文字模式编写的javascript
- 对象文字或模块化Javascript设计模式
- 我如何使用对象文字模式来代替构造函数
- 将代码转换为JS对象文字模式
- 使所有函数成为严格模式文字对象
- Javascript模块化设计模式——哪个更好:自调用函数,还是对象文字方法