基于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 相关文章推荐
Mozilla中显示textarea中选择的文字
Sep 07 Javascript
js中cookie的使用详细分析
May 28 Javascript
JS 有名函数表达式全面解析
Mar 19 Javascript
JavaScript基础知识之数据类型
Aug 06 Javascript
JavaScript表单通过正则表达式验证电话号码
Mar 14 Javascript
jquery如何根据值设置默认的选中项
Mar 17 Javascript
Javascript中3种实现继承的方法和代码实例
Aug 12 Javascript
jQuery实现验证年龄简单思路
Feb 24 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
React Native自定义控件底部抽屉菜单的示例
Feb 08 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
Jun 28 Javascript
js事件机制----捕获与冒泡机制实例分析
May 22 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
php 生成饼图 三维饼图
2009/09/28 PHP
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
ThinkPHP字符串函数及常用函数汇总
2014/07/18 PHP
php实现将上传word文件转为html的方法
2015/06/03 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
newxtree.js代码
2007/03/13 Javascript
JXTree对象,读取外部xml文件数据,生成树的函数
2007/04/02 Javascript
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
CSS+Jquery实现页面圆角框方法大全
2009/12/24 Javascript
JS添加删除一组文本框并对输入信息加以验证判断其正确性
2013/04/11 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
Javascript实现页面跳转的几种方式分享
2013/10/26 Javascript
JS+Canvas 实现下雨下雪效果
2016/05/18 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
网络传输协议(http协议)
2016/11/18 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
Js apply方法详解
2017/02/16 Javascript
JavaScript实现秒杀时钟倒计时
2019/09/29 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
js重写alert事件(避免alert弹框标题出现网址)
2020/12/04 Javascript
python登录pop3邮件服务器接收邮件的方法
2015/04/30 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python批量发送post请求的实现代码
2018/05/05 Python
css3的transform造成z-index无效解决方案
2014/12/04 HTML / CSS
英国在线珠宝店:The Jewel Hut
2017/03/20 全球购物
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
工程管理造价应届生求职信
2013/11/13 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
汉语言文学职业规划
2014/02/14 职场文书
群众路线个人自我剖析材料
2014/10/07 职场文书
活动主持人开场白
2015/05/28 职场文书
老人院义工活动感想
2015/08/07 职场文书
JavaCV实现照片马赛克效果
2022/01/22 Java/Android