基于mootools插件实现遮罩层新手引导


Posted in Javascript onMay 24, 2012

插件代码

/* 
--- 
name: UserGuider 
authors: 
- Garland Yang 
requires: [Core/Class, Core/Element.Style, Core/Element.Event, Core/Element.Dimensions] 
version: 
- 1.0 
... 
*/ 
var UserGuider = new Class({ 
Implements: [Options, Events], 
options: { 
UserGuideList: new Array(), 
step: 0 
}, 
initialize: function (options) { 
this.setOptions(options); 
this.step = this.options.step; 
}, 
createGuide: function () { 
var self = this; 
$$('.userGuide').dispose(); 
var UserGuideList = this.options.UserGuideList; 
var config = UserGuideList[this.step]; 
if (config == null) { 
return; 
} 
var ele = $$('.' + config.className)[0]; 
if (ele == null) { 
return; 
} 
$$('.' + config.className + ' a').set('target', '_blank'); 
var top = ele.getCoordinates().top; 
var right = ele.getCoordinates().right; 
var bottom = ele.getCoordinates().bottom; 
var left = ele.getCoordinates().left; 
var width = ele.getCoordinates().width; 
var height = ele.getCoordinates().height; 
var x = window.getScrollSize().x; 
var y = window.getScrollSize().y; 
this.createShadowDiv('shadowTop', left, 0, width, top); 
this.createShadowDiv('shadowRight', right, 0, x - right, y); 
this.createShadowDiv('shadowButtom', left, bottom, width, y - bottom); 
this.createShadowDiv('shadowLeft', 0, 0, left, y); 
if (config.src != null) { 
this.createUserGuideImg(left + config.imgLeft, top + config.imgTop, config.src); 
} 
if (config.navUrl != null) { 
this.createUserGuideNavImg(right - 50, bottom, config.navUrl); 
} 
if (this.step > 0) { 
this.createUserButton('userguide_undo', 'UserGuide/undo.png', this.step - 1); 
} 
if (this.step < UserGuideList.length - 1) { 
this.createUserButton('userguide_next', 'UserGuide/next.png', this.step + 1); 
} 
this.createUserButton('userguide_finish', 'UserGuide/finish.png', 10000); 
this.changeUserGuideButton(); 
if (config.src2 != null) { 
this.createUserGuideImg(left + config.imgLeft2, top + config.imgTop2, config.src2); 
} 
return this; 
}, 
createShadowDiv: function (id, left, top, width, height) { 
var self = this; 
var div = new Element('div'); 
div.set('id', id); 
div.addClass('userGuide'); 
div.setStyles({ 
left: left + 'px', 
top: top + 'px', 
width: width + 'px', 
height: height + 'px', 
position: 'absolute', 
'background-color': '#000', 
'z-index': 100, 
opacity: 0.5, 
filter: 'alpha(opacity=50)' 
}); 
$$('body').adopt(div); 
return this; 
}, 
createUserGuideNavImg: function (left, top, nav) { 
var self = this; 
var img = new Element('img'); 
img.addClass('userGuideNav'); 
img.addClass('userGuide'); 
img.setStyles({ 
cursor: 'pointer', 
'z-index': 10000, 
left: left + 'px', 
top: top + 'px', 
position: 'absolute' 
}); 
img.set('src', 'userguide/nav.png'); 
img.addEvent('click', function () { 
window.open(nav); 
}); 
$$('body').adopt(img); 
return this; 
}, 
createUserGuideImg: function (left, top, src) { 
var self = this; 
var img = new Element('img'); 
img.addClass('userGuideImg'); 
img.addClass('userGuide'); 
img.setStyles({ 
'z-index': 1000, 
left: left + 'px', 
top: top + 'px', 
position: 'absolute' 
}); 
img.set('src', src); 
$$('body').adopt(img); 
return this; 
}, 
createUserButton: function (className, src, thisStep) { 
var self = this; 
var img = new Element('img'); 
img.addClass(className); 
img.addClass('userGuide'); 
img.setStyles({ 
cursor: 'pointer', 
'z-index': 1000000, 
position: 'absolute' 
}); 
img.set('src', src); 
img.addEvent('click', function () { 
self.step = thisStep; 
self.createGuide(); 
}); 
$$('body').adopt(img); 
return this; 
}, 
changeUserGuideButton: function () { 
var self = this; 
var size = window.getSize(); 
var scroll = window.getScroll(); 
var scrollSize = window.getScrollSize(); 
$$('.userguide_finish').setStyles({ 
left: (size.x - 220) + 'px', 
top: (size.y + scroll.y - 80) + 'px' 
}); 
$$('.userguide_next').setStyles({ 
left: (size.x - 420) + 'px', 
top: (size.y + scroll.y - 80) + 'px' 
}); 
$$('.userguide_undo').setStyles({ 
left: (size.x - 620) + 'px', 
top: (size.y + scroll.y - 80) + 'px' 
}); 
return this; 
} 
});

调用方式
var UserGuider; 
var UserGuideList = new Array({ 
className: 'step0', 
src: 'UserGuide/step0.png', 
imgTop: 50, 
imgLeft: 50 
}, { 
className: 'step1', 
src: 'UserGuide/step1.png', 
imgTop: -150, 
imgLeft: 0, 
src2: 'UserGuide/pic/1.gif', 
imgTop2: 210, 
imgLeft2: 450 
}, { 
className: 'step2', 
src: 'UserGuide/step2.png', 
imgTop: 0, 
imgLeft: -600, 
navUrl: '/MyMessageCenter.aspx', 
src2: 'UserGuide/pic/2.gif', 
imgTop2: 110, 
imgLeft2: 80 
}, { 
className: 'step3', 
src: 'UserGuide/step3.png', 
imgTop: -150, 
imgLeft: 130, 
navUrl: '/MyTaskSearch.aspx', 
src2: 'UserGuide/pic/3.png', 
imgTop2: -120, 
imgLeft2: 250 
}); 
window.addEvent('domready',function(){ 
UserGuider = new UserGuider({ 
UserGuideList: UserGuideList 
}) 
UserGuider.createGuide(); 
});
Javascript 相关文章推荐
js判断是否为数组的函数: isArray()
Oct 30 Javascript
禁用Tab键JS代码兼容Firefox和IE
Apr 18 Javascript
基于javascript的JSON格式页面展示美化方法
Jul 02 Javascript
JS获取各种宽度、高度的简单介绍
Dec 19 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
express文件上传中间件Multer详解
Oct 24 Javascript
解决拦截器对ajax请求的拦截实例详解
Dec 21 Javascript
详解swiper在vue中的应用(以3.0为例)
Sep 20 Javascript
vue实现动态按钮功能
May 13 Javascript
微信小程序吸底区域适配iPhoneX的实现
Apr 09 Javascript
Element图表初始大小及窗口自适应实现
Jul 10 Javascript
vue-cropper组件实现图片切割上传
May 27 Vue.js
jQuery 拖动层(在可视区域范围内)
May 24 #Javascript
jQuery 菜单随滚条改为以定位方式(固定要浏览器顶部)
May 24 #Javascript
获得所有表单值的JQuery实现代码[IE暂不支持]
May 24 #Javascript
js动态在form上插入enctype=multipart/form-data的问题
May 24 #Javascript
javascript中关于break,continue的特殊用法与介绍
May 24 #Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
May 24 #Javascript
JavaScript之编码规范 推荐
May 23 #Javascript
You might like
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
php数组转换js数组操作及json_encode的用法详解
2013/10/26 PHP
两个SUBMIT按钮,如何区分处理
2006/08/22 Javascript
强悍无比的WEB开发好助手FireBug(Firefox Plugin)
2007/01/16 Javascript
求得div 下 img的src地址的js代码
2007/02/28 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
浏览器图片选择预览、旋转、批量上传的JS代码实现
2013/12/04 Javascript
js 3秒后跳转页面的实现代码
2014/03/10 Javascript
Js实现动态添加删除Table行示例
2014/04/14 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
JAVA四种基本排序方法实例总结
2015/07/24 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jquery中object对象循环遍历的方法
2015/12/18 Javascript
JavaScript判断数组重复内容的两种方法(推荐)
2016/06/06 Javascript
javascript回调函数的概念理解与用法分析
2017/05/27 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
AngularJS发送异步Get/Post请求方法
2018/08/13 Javascript
JS将时间秒转换成天小时分钟秒的字符串
2019/07/10 Javascript
基于python 二维数组及画图的实例详解
2018/04/03 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Python 多线程,threading模块,创建子线程的两种方式示例
2019/09/29 Python
发现两个有趣的CSS3动画效果
2013/08/14 HTML / CSS
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
优秀研究生自我鉴定
2013/12/04 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
军训考核自我鉴定
2014/02/13 职场文书
客户经理竞聘演讲稿
2014/05/15 职场文书
监察建议书
2015/02/04 职场文书
2015大一新生军训感言
2015/08/01 职场文书
尊师重教主题班会
2015/08/14 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
告别网页搜索!教你用python实现一款属于自己的翻译词典软件
2021/06/03 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python