silu/创旅丝路/resources/ihchina/TourTemplate-master/public/js/jquery.dialogBox.js

403 lines
11 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* dialogBox 0.0.1
* by Liuyuchao
* Copyright 2015.3
* Date: Wed Mar 25 2015
*/
(function($,window,document){
var pluginName = 'dialogBox',
defaults = {
width: null, //弹出层宽度
height: null, //弹出层高度
autoSize: true, //是否自适应尺寸,默认自适应
autofadeOut: false, //是否自自动消失配合time参数共用
time: 3000, //自动消失时间,单位毫秒
zIndex:9999999, //弹出层定位层级
hasMask: true, //是否显示遮罩层
hasClose: false, //是否显示关闭按钮
hasBtn: false, //是否显示操作按钮,如取消,确定
confirmValue: null, //确定按钮文字内容
confirm: function(){}, //点击确定后回调函数
cancelValue: null, //取消按钮文字内容
cancel: function(){}, //点击取消后回调函数,默认关闭弹出框
effect: '', //动画效果fade(默认),newspaper,fall,scaled,flip-horizontal,flip-vertical,sign,
type: 'normal', //对话框类型normal(普通对话框),correct(正确/操作成功对话框),error(错误/警告对话框)
title: '', //标题内容,如果不设置,则连同关闭按钮(不论设置显示与否)都不显示标题
content: '' //正文内容可以为纯字符串html标签字符串以及URL地址当content为URL地址时将内嵌目标页面的iframe。
};
function DialogBox(element,options){
this.element = element;
this.settings = $.extend({}, defaults, options);
this.init();
}
DialogBox.prototype = {
//初始化弹出框
init: function(){
var that = this,
element = this.element;
that.render(element);
that.setStyle();
that.show();
that.trigger(element);
},
//创建弹出框
create: function(element){
var that = this,
$this = $(element),
title = that.settings.title,
hasBtn = that.settings.hasBtn,
hasMask = that.settings.hasMask,
hasClose = that.settings.hasClose,
confirmValue = that.settings.confirmValue,
cancelValue = that.settings.cancelValue,
dialogHTML = [];
if(!title){
dialogHTML[0] = '<section class="dialog-box"><div class="dialog-box-container"><div class="dialog-box-content"></div>';
}else{
if(!hasClose){
dialogHTML[0] = '<section class="dialog-box"><div class="dialog-box-container"><div class="dialog-box-title"><h3>'+ title + '</h3></div><div class="dialog-box-content"></div>';
}else{
dialogHTML[0] = '<section class="dialog-box"><div class="dialog-box-container"><div class="dialog-box-title"><h3>'+ title + '</h3><span class="span-btn dialog-box-close">×</span></div><div class="dialog-box-content"></div>';
}
}
if(!hasBtn){
dialogHTML[1] = '</div></section>';
}else{
if(confirmValue && cancelValue){
dialogHTML[1] = '<div class="dialog-btn"><span class="span-btn dialog-btn-cancel">' + cancelValue + '</span><span class="span-btn dialog-btn-confirm">' + confirmValue + '</span></div></div></section>';
}else if(cancelValue){
dialogHTML[1] = '<div class="dialog-btn"><span class="span-btn dialog-btn-cancel">' + cancelValue + '</span></div></div></section>';
}else if(confirmValue){
dialogHTML[1] = '<div class="dialog-btn"><span class="span-btn dialog-btn-confirm">' + confirmValue + '</span></div></div></section>';
}else{
dialogHTML[1] = '<div class="dialog-btn"><span class="span-btn dialog-btn-cancel">取消</span><span class="span-btn dialog-btn-confirm">确定</span></div></div></section>';
}
}
if(!hasMask){
dialogHTML[2] = '';
}else{
dialogHTML[2] = '<div id="dialog-box-mask"></div>';
}
return dialogHTML;
},
//渲染弹出框
render: function(element){
var that = this,
$this = $(element),
dialogHTML = that.create($this),
$content = that.parseContent();
$this.replaceWith(dialogHTML[0] + dialogHTML[1]);
if(typeof($content) === 'object'){
$content.appendTo('.dialog-box-content');
}else{
$('.dialog-box-content').append($content);
}
$('body').append(dialogHTML[2]);
},
//解析并处理弹出框内容
parseContent: function(){
var that = this,
content = that.settings.content,
width = that.settings.width,
height = that.settings.height,
type = that.settings.type,
$iframe = $('<iframe>'),
random = '?tmp=' + Math.random(),
urlReg = /^(https?:\/\/|\/|\.\/|\.\.\/)/;
if(urlReg.test(content)){
$iframe.attr({
src: content + random,
frameborder: 'no',
scrolling: 'no',
name: 'dialog-box-iframe',
id: 'dialog-box-iframe'
})
.on('load',function(){
//动态自适应iframe高度;
var $iframe = $(window.frames['dialog-box-iframe'].document),
$iframeBody = $(window.frames['dialog-box-iframe'].document.body),
iframeWidth = $iframe.outerWidth() - 8,
iframeHeight = $iframe.outerHeight() - 16,
$dialogBox = $('.dialog-box'),
$content = $('.dialog-box-content'),
$container = $('.dialog-box-container');
dialogBoxWidth = iframeWidth + 40;
dialogBoxHeight = iframeHeight + 126;
if(that.settings.autoSize){
$(this).width(iframeWidth);
$(this).height(iframeHeight);
$iframeBody.css({
margin: '0',
padding: '0'
});
$content.css({
width: iframeWidth + 'px',
height: iframeHeight + 'px'
});
$container.css({
width: dialogBoxWidth + 'px',
height: dialogBoxHeight + 'px'
});
$dialogBox.css({
width: dialogBoxWidth,
height: function(){
if(type === '' || type === 'normal'){
return dialogBoxHeight + 'px';
}else if(type === 'error' || type === 'correct'){
dialogBoxHeight = dialogBoxHeight + 8;
return dialogBoxHeight + 'px';
}
},
'margin-top': function(){
if(type === '' || type === 'normal'){
return -Math.round(dialogBoxHeight/2) + 'px';
}else if(type === 'error' || type === 'correct'){
dialogBoxHeight = dialogBoxHeight + 4;
return -Math.round(dialogBoxHeight/2) + 'px';
}
},
'margin-left': -Math.round(dialogBoxWidth/2) + 'px'
});
}else{
$(this).width(that.settings.width - 40);
$(this).height(that.settings.height - 126);
}
});
return $iframe;
}else{
return content;
}
},
//显示弹出框
show: function(){
$('.dialog-box').css({display:'block'});
setTimeout(function(){
$('.dialog-box').addClass('show');
},50)
$('#dialog-box-mask').show();
},
//隐藏弹出框
fadeOut: function(element){
var $this = $(element),
$dialogBox = $('.dialog-box'),
$iframe = $('#dialogBox-box-iframe');
$dialogBox.removeClass('show');
setTimeout(function(){
if($iframe){
$iframe.attr('src','_blank');
}
$dialogBox.replaceWith('<div id="' + $this.attr('id') + '"></div/>');
$('#dialog-box-mask').remove();
},150)
},
//设置弹出框样式
setStyle: function(){
var that = this,
$dialog = $('.dialog-box'),
$container = $('.dialog-box-container'),
$content = $('.dialog-box-content'),
$mask = $('#dialog-box-mask'),
type = that.settings.type,
EFFECT = 'effect';
//弹出框外框样式
$dialog.css({
width: function(){
if(that.settings.width){
return that.settings.width + 'px';
}else{
return;
}
},
height: function(){
if(that.settings.height){
if(type === '' || type === 'normal'){
return that.settings.height + 'px';
}else if(type === 'error' || type === 'correct'){
return that.settings.height + 4 + 'px';
}
}else{
return;
}
},
'margin-top': function(){
var height;
if(type === '' || type === 'normal'){
height = that.settings.height;
}else if(type === 'error' || type === 'correct'){
height = that.settings.height + 4;
}
return -Math.round(height/2) + 'px';
},
'margin-left': function(){
var width = $(this).width();
return -Math.round(width/2) + 'px';
},
'z-index': that.settings.zIndex
});
//弹出框内层容器样式
$container.css({
width: function(){
if(that.settings.width){
return that.settings.width + 'px';
}else{
return;
}
},
height: function(){
if(that.settings.height){
return that.settings.height + 'px';
}else{
return;
}
},
});
//弹出框内容样式
$content.css({
width: function(){
if(that.settings.width){
return that.settings.width - 40 + 'px';
}else{
return;
}
},
height: function(){
if(that.settings.height){
return that.settings.height - 126 + 'px';
}else{
return;
}
}
});
//遮罩层样式
$mask.css({
height: $(document).height() + 'px'
});
//判断弹出框类型
switch(that.settings.type){
case 'correct':
$container.addClass('correct');
break;
case 'error':
$container.addClass('error');
break;
default:
$container.addClass('normal');;
break;
}
//弹出框多种动画效果
switch(that.settings.effect){
case 'newspaper':
$dialog.addClass(EFFECT + '-newspaper');
break;
case 'fall':
$dialog.addClass(EFFECT + '-fall');
break;
case 'scaled':
$dialog.addClass(EFFECT + '-scaled');
break;
case 'flip-horizontal':
$dialog.addClass(EFFECT + '-flip-horizontal');
break;
case 'flip-vertical':
$dialog.addClass(EFFECT + '-flip-vertical');
break;
case 'sign':
$dialog.addClass(EFFECT + '-sign');
break;
default:
$dialog.addClass(EFFECT + '-fade');
break;
}
},
//弹出框触屏器(系列事件)
trigger: function(element,event){
var that = this,
$this = $(element);
$('.dialog-box-close,.dialog-btn-cancel,.dialog-btn-confirm').on('click',function(){
that.fadeOut($this);
});
$(document).keyup(function(event){
if(event.keyCode === 27){
that.fadeOut($this);
}
});
if(that.settings.autofadeOut){
setTimeout(function(){
that.fadeOut($this);
},that.settings.time)
}
if($.isFunction(that.settings.confirm)){
$('.dialog-btn-confirm').on('click',function(){
that.settings.confirm();
})
}
if($.isFunction(that.settings.cancel)){
$('.dialog-btn-cancel').on('click',function(){
that.settings.cancel();
})
}
}
};
$.fn[pluginName] = function(options) {
this.each(function() {
if (!$.data(this, "plugin_" + pluginName)) {
$.data(this, "plugin_" + pluginName, new DialogBox(this, options));
}
});
return this;
};
})(jQuery,window,document)