基于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验证Checkbox是否选中的代码 推荐
Sep 04 Javascript
利用json获取字符出现次数的代码
Mar 22 Javascript
JavaScript学习笔记之内置对象
Jan 22 Javascript
Js可拖拽放大的层拖动特效实现方法
Feb 25 Javascript
js根据手机客户端浏览器类型,判断跳转官网/手机网站多个实例代码
Apr 30 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
JS设计模式之惰性模式(二)
Sep 29 Javascript
jQuery 改变P标签文本值方法
Feb 24 jQuery
vue项目实现github在线预览功能
Jun 20 Javascript
深入剖析JavaScript instanceof 运算符
Jun 14 Javascript
jQuery实现动态向上滚动
Dec 21 jQuery
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
如何选购合适的收音机
2021/03/01 无线电
php 删除cookie和浏览器重定向
2009/03/16 PHP
解析php addslashes()与addclashes()函数的区别和比较
2013/06/24 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
新鲜出炉的js tips提示效果
2011/04/03 Javascript
js通过地址栏给action传值(中文乱码全是问号)
2013/05/02 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
vue之浏览器存储方法封装实例
2018/03/15 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
微信小程序发送短信验证码完整实例
2019/01/07 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python splitlines使用技巧
2008/09/06 Python
python获取网页状态码示例
2014/03/30 Python
Python出现segfault错误解决方法
2016/04/16 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
在pycharm中使用git版本管理以及同步github的方法
2019/01/16 Python
python多线程抽象编程模型详解
2019/03/20 Python
详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)
2019/08/02 Python
Python 从subprocess运行的子进程中实时获取输出的例子
2019/08/14 Python
python 实现单通道转3通道
2019/12/03 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Python自动巡检H3C交换机实现过程解析
2020/08/14 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
离婚协议书范文2014
2014/10/16 职场文书
晚会开幕词范文
2016/03/04 职场文书