基于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 相关文章推荐
jquery 可排列的表实现代码
Nov 13 Javascript
利用javascript解决图片缩放及其优化的代码
May 23 Javascript
js导出txt示例代码
Jan 14 Javascript
IE8中动态创建script标签onload无效的解决方法
Dec 22 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
Dec 03 Javascript
javascript执行环境及作用域详解
May 05 Javascript
JSONP和批量操作功能的实现方法
Aug 21 Javascript
javascript 中关于array的常用方法详解
May 05 Javascript
Vue项目webpack打包部署到服务器的实例详解
Jul 17 Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 Javascript
跨域请求两种方法 jsonp和cors的实现
Nov 11 Javascript
Node.js实现批量下载图片简单操作示例
Jan 18 Javascript
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
一个oracle+PHP的查询的例子
2006/10/09 PHP
PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br
2011/11/10 PHP
php常用的url处理函数总结
2014/11/19 PHP
php 类自动载入的方法
2015/06/03 PHP
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
jquery dialog键盘事件代码
2010/08/01 Javascript
return false,对阻止事件默认动作的一些测试代码
2010/11/17 Javascript
将json对象转换为字符串的方法
2014/02/20 Javascript
javascript验证身份证号
2015/03/03 Javascript
Jquery注册事件实现方法
2015/05/18 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
js实现索引图片切换效果
2015/11/21 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
基于React实现表单数据的添加和删除详解
2017/03/14 Javascript
highCharts提示框中显示当前时间的方法
2019/01/18 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
微信小程序button标签open-type属性原理解析
2020/01/21 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
pycharm 使用心得(七)一些实用功能介绍
2014/06/06 Python
python操作gmail实例
2015/01/14 Python
在Python中测试访问同一数据的竞争条件的方法
2015/04/23 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python使用RNN实现文本分类
2018/05/24 Python
Python3中正则模块re.compile、re.match及re.search函数用法详解
2018/06/11 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
用ldap作为django后端用户登录验证的实现
2020/12/07 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
2020/12/14 Python
英国顶级水晶珠宝零售商之一:Tresor Paris
2019/04/27 全球购物
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
工作会议欢迎词
2014/01/16 职场文书
酒店副总经理岗位职责范本
2014/02/04 职场文书
计算机专业自荐信
2015/03/05 职场文书
详细介绍MySQL中limit和offset的用法
2022/05/06 MySQL