/**
* @description Mask 弹层
* @function
* @name Mask
* @param {Object} options 配置项
*/ var passport = passport || {} passport.page = passport.page || {}; /**
* @description 获取页面宽度
* @name passport.page.getWidth
* @function
* @grammar passport.page.getWidth()
* @return {number} 页面宽度
*/
passport.page.getWidth = function () {
var doc = document,
body = doc.body,
html = doc.documentElement,
client = doc.compatMode == 'BackCompat' ? body : doc.documentElement; return Math.max(html.scrollWidth, body.scrollWidth, client.clientWidth);
}; /**
* @description 获取页面高度
* @name passport.page.getHeight
* @function
* @grammar passport.page.getHeight()
*
* @return {number} 页面高度
*/
passport.page.getHeight = function () {
var doc = document,
body = doc.body,
html = doc.documentElement,
client = doc.compatMode == 'BackCompat' ? body : doc.documentElement; return Math.max(html.scrollHeight, body.scrollHeight, client.clientHeight);
}; /**
* @description 获取页面视觉区域宽度
* @name passport.page.getViewWidth
* @function
* @grammar passport.page.getViewWidth()
*
* @return {number} 页面视觉区域宽度
*/
passport.page.getViewWidth = function () {
var doc = document,
client = doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement; return client.clientWidth;
}; /**
* @description 获取页面视觉区域高度
* @name passport.page.getViewHeight
* @function
* @grammar passport.page.getViewHeight()
* @return {number} 页面视觉区域高度
*/
passport.page.getViewHeight = function () {
var doc = document,
client = doc.compatMode == 'BackCompat' ? doc.body : doc.documentElement; return client.clientHeight;
}; /**
* @description 获取纵向滚动量
* @name passport.page.getScrollTop
* @function
* @grammar passport.page.getScrollTop()
* @return {number} 纵向滚动量
*/
passport.page.getScrollTop = function () {
var d = document;
return window.pageYOffset || d.documentElement.scrollTop || d.body.scrollTop;
}; /*
* @description 获取横向滚动量
*
* @return {number} 横向滚动量
*/
passport.page.getScrollLeft = function () {
var d = document;
return window.pageXOffset || d.documentElement.scrollLeft || d.body.scrollLeft;
}; function Mask(options){
var me = this,
ua = navigator.userAgent,
maskHtml = me.toHTMLString(),
sf = /(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(ua) && !/chrome/i.test(ua) ? + (RegExp['\x241'] || RegExp['\x242']) : undefined,
ie = /msie (\d+\.\d+)/i.test(ua) ? (document.documentMode || + RegExp['\x241']) : undefined; me.zIndex = 999;
me.opacity = 0.3;
me.bgColor = "#000000";
me.coverable = false;
me.container = document.body; insertHTML.call(me.container,"afterBegin", maskHtml) me.maskDom = document.getElementById('PASSP__DIA__Mask'); if(ie == 6){
me.maskDom.style.position = "absolute";
} function insertHTML( position, html) {
var range,begin,element = this; //在opera中insertAdjacentHTML方法实现不标准,如果DOMNodeInserted方法被监听则无法一次插入多element
if (element.insertAdjacentHTML) {
element.insertAdjacentHTML(position, html);
} else {
// 这里不做"undefined" != typeof(HTMLElement) && !window.opera判断,其它浏览器将出错?!
// 但是其实做了判断,其它浏览器下等于这个函数就不能执行了
range = element.ownerDocument.createRange();
// FF下range的位置设置错误可能导致创建出来的fragment在插入dom树之后html结构乱掉
// 改用range.insertNode来插入html, by wenyuxiang @ 2010-12-14.
position = position.toUpperCase();
if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {
range.selectNodeContents(element);
range.collapse(position == 'AFTERBEGIN');
} else {
begin = position == 'BEFOREBEGIN';
range[begin ? 'setStartBefore' : 'setEndAfter'](element);
range.collapse(begin);
}
range.insertNode(range.createContextualFragment(html));
}
return element;
} function resize(){
if (me.container == document.body) {
var ls = me.maskDom.style; ls.width = passport.page.getViewWidth() + 'px'; ls.height = passport.page.getViewHeight() + 'px'; ls.display = "";
}
} function scroll(){
if (me.container == document.body) {
var ls = me.maskDom.style;
ls.display = "none";
ls.top = passport.page.getScrollTop() + "px";
ls.left = passport.page.getScrollLeft() + "px";
ls.display = "";
}
} function showObjects(bool){
var objects = document.getElementsByTagName("object");
var v = bool ? "visible" : "hidden";
for(var i = 0, o, l = objects.length; i < l; i ++){
o = objects[i];
o.style.visibility = v;
}
} Mask.prototype.show = function(){
var me = this;
resize();
ie == 6 && scroll();
$(window).on("resize", resize);
ie == 6 && $(window).on("scroll", scroll); var es = me.maskDom.style;
es.opacity = me.opacity;
es.zIndex = me.zIndex;
es.filter = "alpha(opacity=" + me.opacity * 100 + ")";
es.backgroundColor = me.bgColor; es.display = ''; sf && showObjects(false);
} Mask.prototype.hide = function(){
var es = me.maskDom.style;
es.display = 'none';
$(window).off("resize", resize);
ie == 6 && $(window).off("scroll", scroll);
sf && showObjects(true);
} } Mask.prototype.toHTMLString = function(){
return "<div id='PASSP__DIA__Mask' style='top:0px; left:0px; position:fixed; display:none;'>"
+("<iframe frameborder='0' style='"
+"filter:progid:DXImageTransform.Microsoft.Alpha(opacity:0);"
+"position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:-1' "
+"src='" + (window.location.protocol.toLowerCase() == "https:" ? "https://passport.passport.com/passApi/html/_blank.html" : "about:blank") + "'></iframe><div style='position:absolute;top:0px;left:0px;width:100%;height:100%;z-index:-1;'> </div>") +"</div>";
} /**
* @description Dialog 弹层
* @class
* @name Dialog
* @param {Object} options 配置项
* @param {Number} options.width 弹层宽度
* @param {Number} options.height 弹层高度
* @param {Boolean} options.mask 是否需要遮罩层
* @param {String} options.titleText 标题
*/ function Dialog(options){
this.options = options;
this._width = this.options.width || "auto";
this._height = this.options.height || "auto";
this.dom = this.options.dom;
this._mask = this.options.mask || true;
this._titleText = this.options.title;
this._closeBtn = this.options.closeBtn || true,
this._eventMng = [];
this.onRender = this.options.onRender || function(){};
this._num = 'PASSP__DIA__'+Math.floor(Math.random() * 2147483648).toString(36).toUpperCase()+'_';
this.init()
} Dialog.renderMask = function(){
var me = this;
if(this._mask) return this;
this._mask = new Mask()
} Dialog._createElement = function(id){
var el = document.createElement('div');
el.id = id;
return el
} Dialog.prototype.setWidth = function(width){
this.el.style.width = width + 'px'
} Dialog.prototype.setHeight = function(height){
this.el.style.width = height + 'px' } Dialog.prototype.setSize = function(size){
this.setWidth(size.width || size[0])
this.setHeight(size.height || size[1])
} Dialog.prototype.setPosition = function(pos){
if(this.el.style.position == "static"){
this.el.style.position = 'absolute'
} if(typeof pos.left == "number")
this.el.style.left = pos.left + 'px'
if(typeof pos.top == "number")
this.el.style.top = pos.top + 'px'
} Dialog.prototype.show = function(){
if(this.options.beforeShow && this.options.beforeShow() === false)
return this;
this._mask && Dialog._mask.show();
this.el.style.display = "block";
this.dom.style.display = 'block';
this._isShown = true; } Dialog.prototype.hide = function(){
if(this.options.beforeHide && this.options.beforeHide() === false)
return this;
this._mask && Dialog._mask.hide();
this.el.style.display = "none";
this._isShown = false;
} Dialog.prototype.center = function(){
var bodyWidth = passport.page.getViewWidth();
var bodyHeight = passport.page.getViewHeight();
var left = (((bodyWidth - (this._width || this.el.offsetWidth)) / 2) | 0) + passport.page.getScrollLeft();
var top = (((bodyHeight - (this._height || this.el.offsetHeight)) / 2) | 0) + passport.page.getScrollTop();
this.setPosition({left: left,top: top });
} Dialog.prototype.init = function(){ this._createContainer() if(this._mask){
Dialog.renderMask()
} if(this._titleText){
this._createTitle()
} this._createBody(); this.show(); this._bind();
} Dialog.prototype._createContainer = function(){
this.el = Dialog._createElement(this._num + 'Container');
this.el.className = 'pass-dialog-container';
this.el.style.zIndex = this.zIndex || 1000;
if(this._width){
this.el.style.width = this._width + 'px';
}
if(this._height){
this.el.style.height = this._height + 'px';
} } Dialog.prototype._createTitle = function(){
var tit = Dialog._createElement(this._num + 'Title');
tit.className = 'pass-dialog-title';
var titleText = '<span class="pass-dialog-titText" id="'+this._num + 'titleText">'+this._titleText+'</span>'
tit.appendChild($(titleText).get(0))
this.el.appendChild(tit)
if(this._closeBtn){
var closeBtn = '<span class="pass-dialog-close" id="'+this._num + 'close">X</span>'
tit.appendChild($(closeBtn).get(0))
} } /*Dialog.prototype._createMask = function(){
//var height = Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
var mask = document.createElement('div'),
height = Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
mask.id = 'PASSP__DIAMASK__'+this._num;
mask.className = 'pass-dialog-mask';
mask.style.height = height + 'px';
this.el.appendChild(mask)
//$('body').append(this.maskDom)
//this.maskDom.height(height);
}*/ Dialog.prototype._createBody = function(){
var body = Dialog._createElement(this._num + 'Body') body.appendChild(this.dom) this.el.appendChild(body) document.body.appendChild(this.el)
} Dialog.prototype.addEvent = function(el, event, handler){
el.on(event, handler);
this._eventMng.push({
el: el,
event: event,
handler: handler
});
}; Dialog.prototype._bind = function(){
var me = this;
me.action = {
'close' : function(evt){
me.hide();
evt.preventDefault()
}
}
me.addEvent($("#"+me._num + 'close'),'click',me.action['close'])
} Dialog.prototype.destroy = function(){
for(var i = 0 , j = this._eventMng.length; i < j; i++){
var e = this._eventMng[i];
e.el.off(e.event, e.handler);
}
$(el).remove()
}

  

dialog组件的更多相关文章

  1. Vue结合slot插槽分发父组件内容实现高度复用、更加灵活的dialog组件

    之前写过一篇关于vue实现dialog会话框组件的文章(http://www.cnblogs.com/fozero/p/8546883.html)[http://www.cnblogs.com/foz ...

  2. element-ui dialog组件添加可拖拽位置 可拖拽宽高

    edge浏览器下作的gifhttp://www.lanourteam.com/%E6... 有几个点需要注意一下 每个弹窗都要有唯一dom可操作 指令可以做到 拖拽时要添加可拖拽区块 header 由 ...

  3. element的Dialog组件踩坑

    在一个组件页面中需要有一个弹窗,为了代码简洁我把弹窗封装成一个组件方便重复调用 描述大致是一个父组件,里面有一个按钮还有一个子组件(弹窗),点击按钮让弹窗出来,弹窗自带的有关闭功能,点击关闭以后再点击 ...

  4. 移动端dialog组件

    移动端dialog组件 dialogView是满足移动端下,用户自定义的dialog组件,API可扩展性强,使用便捷.现版本是基于jquery库编写的,在使用之前需要引入jquery库或者Zepto库 ...

  5. 06 - Vue3 UI Framework - Dialog 组件

    做完按钮之后,我们应该了解了遮罩层的概念,接下来我们来做 Dialog 组件! 返回阅读列表点击 这里 需求分析 默认是不可见的,在用户触发某个动作后变为可见 自带白板卡片,分为上中下三个区域,分别放 ...

  6. element-ui Tag、Dialog组件源码分析整理笔记(五)

    Tag 标签组件 <script> export default { name: 'ElTag', props: { text: String, closable: Boolean, // ...

  7. 关于Vue的component制作dialog组件

    其实原理很简单,兴个粟子, 点击按钮出现 dialog 弹出杠, 将dialog做成一个组件,components/dialog.vue 就是在components里面新建一个vue.将这个vue做为 ...

  8. 封装element-ui的dialog组件

    封装组件: <template> <div class="dialog-container"> <el-dialog title="titl ...

  9. dialog组件的jquery封装实现

    (function($){ $.extend({ Dialog : function(id, options){ var option = $.extend({}, options); option. ...

随机推荐

  1. js--eval函数

    前言: js的eval函数很牛叉,用了几次--不过都没有记录.试想:如果没有EXT.JQery,怎样将json字符串转换为对象呢? 示例: 定义2个字符串变量s1.s2.其中s1表示一个对象:s2表示 ...

  2. OD鲜为人知的小技巧--搜索通配符(关键字)

    我看过一些OD教程,关于通配符这一点很少有人讲解(大概是我看的教程少吧)  近日通过看<黑客反汇编揭秘(第二版)>第165页了解到,原来OD还有这样方便的功能,那就是搜索通配符: Olly ...

  3. 【WCF--初入江湖】05 WCF异步编程

    05 WCF异步编程 一.服务设计最佳实践 在设计之初,是否用异步,应该由客户端来决定,而不应该去考虑服务的调用者调用的方式. 优点:充分利用多核CPU, 改善用户体验 缺点:滥用异步,会影响性能 二 ...

  4. Linq to Entity中连接两个数据库时要注意的问题

    Linq to Entity中连接两个数据库时要注意的问题 今天大学同学问了我一个问题,Linq to Entity中连接两个数据库时,报错“指定的 LINQ 表达式包含对与不同上下文关联的查询的引用 ...

  5. 暑假学习日记:Splay树

    从昨天开始我就想学这个伸展树了,今天花了一个上午2个多小时加下午2个多小时,学习了一下伸展树(Splay树),学习的时候主要是看别人博客啦~发现下面这个博客挺不错的http://zakir.is-pr ...

  6. 无法解析指定的连接标识符 oracle错误12154

    导出的时候老是报这个错,exp userid=c##yh/yh@MyOracle tables=(stu3) file=d:\e.dmp; 解决了好久,最后都失败了,后来加了127.0.0.1:152 ...

  7. 李洪强iOS开发之【零基础学习iOS开发】【01-前言】02-准备

    在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不 ...

  8. map的详细用法

     map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时 ...

  9. java io知识点汇总FIle类

    1.路径分隔符问题: 因为java有跨平台行,而在windows和linux中的目录分隔符是不同的.windows是"\" 而linux是"/"  所以必须想办 ...

  10. JavaWeb项目开发案例精粹-第2章投票系统-003Dao层

    1. package com.sanqing.dao; import java.util.List; import com.sanqing.bean.Vote; import com.sanqing. ...