以下是 jQuery扁平对话框插件gDialog js代码 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>jQuery扁平对话框插件gDialog</title>
<link href="src/normalize.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="src/animate.min.css">
<link rel="stylesheet" href="src/jquery.gDialog.css">
<style>
button { border:0;}
.container { margin:50px auto; max-width:728px;text-align:center;font-family:Arial;}
.btn {background-color:#ED5565; color:#fff; padding:20px; margin:10px 30px; border-radius:5px; border-bottom:3px solid #DA4453;}
</style>
</head>
<body>
<div class="container">
<h1>jQuery gDialog Plugin Exampels</h1>
<button class="btn demo-1">Alert Dialog Box</button>
<button class="btn demo-2">Prompt Dialog Box</button>
<button class="btn demo-3">Prompt Dialog Box</button>
</div>
<script src="src/jquery.js"></script>
<script src="src/jquery.gDialog.js"></script>
<script>
$('.demo-1').click(function(){
$.gDialog.alert("Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse libero erat, scelerisque sit amet dolor nec, euismod feugiat massa.", {
title: "Alert Dialog Box",
animateIn: "bounceIn",
animateOut: "bounceOut"
});
});
$('.demo-2').click(function(){
$.gDialog.prompt("内容", "#", {
title: "Prompt Dialog Box",
required: true,
animateIn : "rollIn",
animateOut: "rollOut"
});
});
$('.demo-3').click(function(){
$.gDialog.confirm("Are You Sure?", {
title: "Confirm Dialog Box",
animateIn : "bounceInDown",
animateOut: "bounceOutUp"
});
});
</script>
</body>
</html>
JS代码(jquery.gDialog.js):
'use strict';
/** * jquery.gDialog.js * @version:v0.1.0 * @author:ogilvieira * * The MIT License (http://www.opensource.org/licenses/mit-license.php) * * Permission is hereby granted,free of charge,to any person * obtaining a copy of this software and associated documentation * files (the "Software"),to deal in the Software without * restriction,including without limitation the rights to use,* copy,modify,merge,publish,distribute,sublicense,and/or sell * copies of the Software,and to permit persons to whom the * Software is furnished to do so,subject to the following * conditions:* * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS",WITHOUT WARRANTY OF ANY KIND,* EXPRESS OR IMPLIED,INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM,DAMAGES OR OTHER LIABILITY,* WHETHER IN AN ACTION OF CONTRACT,TORT OR OTHERWISE,ARISING * FROM,OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. */
(function (factory){
if (typeof define === 'function' && define.amd){
define(['jquery'],factory);
}
else if (typeof exports === 'object'){
module.exports = factory(require('jquery'));
}
else{
factory(jQuery || Zepto);
}
}
(function($){
var m ={
}
;
var g ={
}
;
m.OPENING = false;
m._OPTIONS ={
title:false,animateIn:false,animateOut:false,onSubmit:false,onCancel:false,required:false,}
;
m.tplBase = "<div class=\"gdialog-wrap\">";
m.tplBase += "<div class=\"gdialog-container\">";
m.tplBase += "{
{
HEADER}
}
";
m.tplBase += "<div class=\"gdialog-content\">{
{
message}
}
{
{
INPUT}
}
</div>";
m.tplBase += "<div class=\"gdialog-button-group\">{
{
BUTTON_CANCEL}
}
<button class=\"button button-ok\">Ok</button></div>";
m.tplBase += "</div>";
m.tplBase += "</div>";
m.tplHeader = "<div class=\"gdialog-header\">{
{
title}
}
</div>";
m.tplInput = "<div class=\"gdialog-field\"><input type=\"text\"></div>";
m.getTeplate = function(type,message,options){
var t = m.tplBase;
if( type !== 'alert' ){
t = t.replace("{
{
BUTTON_CANCEL}
}
","<button class=\"button button-cancel\">Cancel</button>");
}
else{
t = t.replace("{
{
BUTTON_CANCEL}
}
","");
}
if( type == 'prompt' ){
t = t.replace("{
{
INPUT}
}
",m.tplInput);
}
else{
t = t.replace("{
{
INPUT}
}
","");
}
if( options.title ){
t = t.replace("{
{
HEADER}
}
",m.tplHeader.replace("{
{
title}
}
",options.title) );
}
else{
t = t.replace("{
{
HEADER}
}
","");
}
t = t.replace("{
{
message}
}
",message );
return t;
}
;
m.clear = function(){
$('.gdialog-shadow').length ? $('.gdialog-shadow').remove():'';
$('.gdialog-wrap').length ? $('.gdialog-wrap').remove():'';
}
;
m.Dialog = function(){
var that = this;
that.close = function(){
$('.gdialog-shadow').addClass("animated fadeOut");
if( that.options.animateOut ){
if( that.options.animateIn ){
that.container.find('.gdialog-container').removeClass(that.options.animateIn)}
that.container.find('.gdialog-container').addClass('animated '+that.options.animateOut);
setTimeout(function(){
that.container.removeClass('is-active');
that.container.remove();
m.OPENING = false;
$('.gdialog-shadow').remove();
}
,800);
}
else{
that.container.remove();
m.OPENING = false;
$('.gdialog-shadow').remove();
}
}
;
that.addEvents = function(){
that.btnOk.on("click",function(e){
e.preventDefault();
var res = false;
if( that.field.length ){
if( that.options.required == true && !that.field.val().length ){
that.field.addClass('is-invalid');
return false;
}
else{
that.field.removeClass('is-invalid');
res = that.field.val();
}
}
else{
res = true;
}
if( typeof that.options.onSubmit == 'function' ){
that.options.onSubmit(res);
}
that.close();
}
);
that.btnCancel.on("click",function(e){
e.preventDefault();
var res = false;
if( that.field.length && that.field.val().length !== 0 ){
res = that.field.val();
}
if( typeof that.options.onCancel == 'function' ){
that.options.onCancel(res);
}
that.close();
}
);
}
this.init = function(type,message,options,defaultValue){
if( m.OPENING ){
$('.gdialog-shadow,.gdialog-wrap').remove();
}
m.clear();
that.options = m.getOptions(options);
$('body').append("<div class=\"gdialog-shadow\"></div> "+m.getTeplate(type,message,that.options) );
that.container = $('body').find('.gdialog-wrap');
that.btnOk = that.container.find('.button-ok');
that.btnCancel = that.container.find('.button-cancel');
that.field = that.container.find('input');
if( defaultValue && that.field.length ){
that.field.val(defaultValue);
}
;
that.container.addClass('is-active').css({
'top':$(window).scrollTop()+50}
);
if( that.options.animateIn ){
that.container.find('.gdialog-container').addClass('animated '+that.options.animateIn);
}
m.OPENING = true;
that.addEvents();
}
;
}
;
m.getOptions = function(options){
var o = $.extend({
}
,m._OPTIONS);
if( typeof options == 'object' ){
$.each(options,function(key,val){
o[key] !== undefined ? o[key] = val:console.error("The option \""+key+"\" not exist.");
}
);
}
return o;
}
;
//global functions g.alert = function(message,userOptions){
var message = message || "";
var userOptions = userOptions ||{
}
;
var dialog = new m.Dialog;
dialog.init('alert',message,userOptions);
}
;
g.confirm = function(message,userOptions){
var message = message || "";
var userOptions = userOptions ||{
}
;
var dialog = new m.Dialog;
dialog.init('confirm',message,userOptions);
}
;
g.prompt = function(message,defaultValue,userOptions){
var message = message || "";
var userOptions = userOptions ||{
}
;
var dialog = new m.Dialog;
dialog.init('prompt',message,userOptions,defaultValue);
}
;
g.config = function(options){
if( typeof options !== 'object' ){
return false;
}
$.each(options,function(key,val){
m._OPTIONS[key] !== undefined ? m._OPTIONS[key] = val:console.error("The option \""+key+"\" not exist.");
}
);
}
;
$.gDialog = $.gDialog || g;
}
));
//www.sucaijiayuan.com
CSS代码(normalize.css):
/*! normalize.css v3.0.1 | MIT License | git.io/normalize */
/** * 1. Set default font family to sans-serif. * 2. Prevent iOS text size adjust after orientation change,without disabling * user zoom. */
html{font-family:sans-serif;/* 1 */
-ms-text-size-adjust:100%;/* 2 */
-webkit-text-size-adjust:100%;/* 2 */
}
/** * Remove default margin. */
body{margin:0;}
/* HTML5 display definitions ========================================================================== */
/** * Correct `block` display not defined for any HTML5 element in IE 8/9. * Correct `block` display not defined for `details` or `summary` in IE 10/11 and Firefox. * Correct `block` display not defined for `main` in IE 11. */
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block;}
/** * 1. Correct `inline-block` display not defined in IE 8/9. * 2. Normalize vertical alignment of `progress` in Chrome,Firefox,and Opera. */
audio,canvas,progress,video{display:inline-block;/* 1 */
vertical-align:baseline;/* 2 */
}
/** * Prevent modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */
audio:not([controls]){display:none;height:0;}
/** * Address `[hidden]` styling not present in IE 8/9/10. * Hide the `template` element in IE 8/9/11,Safari,and Firefox < 22. */
[hidden],template{display:none;}
/* Links ========================================================================== */
/** * Remove the gray background color from active links in IE 10. */
a{background:transparent;}
/** * Improve readability when focused and also mouse hovered in all browsers. */
a:active,a:hover{outline:0;}
/* Text-level semantics ========================================================================== */
/** * Address styling not present in IE 8/9/10/11,Safari,and Chrome. */
abbr[title]{border-bottom:1px dotted;}
/** * Address style set to `bolder` in Firefox 4+,Safari,and Chrome. */
b,strong{font-weight:bold;}
/** * Address styling not present in Safari and Chrome. */
dfn{font-style:italic;}
/** * Address variable `h1` font-size and margin within `section` and `article` * contexts in Firefox 4+,Safari,and Chrome. */
h1{font-size:2em;margin:0.67em 0;}
/** * Address styling not present in IE 8/9. */
mark{background:#ff0;color:#000;}
/** * Address inconsistent and variable font size in all browsers. */
small{font-size:80%;}
/** * Prevent `sub` and `sup` affecting `line-height` in all browsers. */
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}
sup{top:-0.5em;}
sub{bottom:-0.25em;}
/* Embedded content ========================================================================== */
/** * Remove border when inside `a` element in IE 8/9/10. */
img{border:0;}
/** * Correct overflow not hidden in IE 9/10/11. */
svg:not(:root){overflow:hidden;}
/* Grouping content ========================================================================== */
/** * Address margin not present in IE 8/9 and Safari. */
figure{margin:1em 40px;}
/** * Address differences between Firefox and other browsers. */
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0;}
/** * Contain overflow in all browsers. */
pre{overflow:auto;}
/** * Address odd `em`-unit font size rendering in all browsers. */
code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em;}
/* Forms ========================================================================== */
/** * Known limitation:by default,Chrome and Safari on OS X allow very limited * styling of `select`,unless a `border` property is set. */
/** * 1. Correct color not being inherited. * Known issue:affects color of disabled elements. * 2. Correct font properties not being inherited. * 3. Address margins set differently in Firefox 4+,Safari,and Chrome. */
button,input,optgroup,select,textarea{color:inherit;/* 1 */
font:inherit;/* 2 */
margin:0;/* 3 */
}
/** * Address `overflow` set to `hidden` in IE 8/9/10/11. */
button{overflow:visible;}
/** * Address inconsistent `text-transform` inheritance for `button` and `select`. * All other form control elements do not inherit `text-transform` values. * Correct `button` style inheritance in Firefox,IE 8/9/10/11,and Opera. * Correct `select` style inheritance in Firefox. */
button,select{text-transform:none;}
/** * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. * 2. Correct inability to style clickable `input` types in iOS. * 3. Improve usability and consistency of cursor style between image-type * `input` and others. */
button,html input[type="button"],/* 1 */
input[type="reset"],input[type="submit"]{-webkit-appearance:button;/* 2 */
cursor:pointer;/* 3 */
}
/** * Re-set default cursor for disabled elements. */
button[disabled],html input[disabled]{cursor:default;}
/** * Remove inner padding and border in Firefox 4+. */
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0;}
/** * Address Firefox 4+ setting `line-height` on `input` using `!important` in * the UA stylesheet. */
input{line-height:normal;}
/** * It's recommended that you don't attempt to style these elements. * Firefox's implementation doesn't respect box-sizing,padding,or width. * * 1. Address box sizing set to `content-box` in IE 8/9/10. * 2. Remove excess padding in IE 8/9/10. */
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;/* 1 */
padding:0;/* 2 */
}
/** * Fix the cursor style for Chrome's increment/decrement buttons. For certain * `font-size` values of the `input`,it causes the cursor style of the * decrement button to change from `default` to `text`. */
input[type="number"]::-webkit-inner-spin-button,input[type="number"]::-webkit-outer-spin-button{height:auto;}
/** * 1. Address `appearance` set to `searchfield` in Safari and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari and Chrome * (include `-moz` to future-proof). */
input[type="search"]{-webkit-appearance:textfield;/* 1 */
-moz-box-sizing:content-box;-webkit-box-sizing:content-box;/* 2 */
box-sizing:content-box;}
/** * Remove inner padding and search cancel button in Safari and Chrome on OS X. * Safari (but not Chrome) clips the cancel button when the search input has * padding (and `textfield` appearance). */
input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}
/** * Define consistent border,margin,and padding. */
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em;}
/** * 1. Correct `color` not being inherited in IE 8/9/10/11. * 2. Remove padding so people aren't caught out if they zero out fieldsets. */
legend{border:0;/* 1 */
padding:0;/* 2 */
}
/** * Remove default vertical scrollbar in IE 8/9/10/11. */
textarea{overflow:auto;}
/** * Don't inherit the `font-weight` (applied by a rule above). * NOTE:the default cannot safely be changed in Chrome and Safari on OS X. */
optgroup{font-weight:bold;}
/* Tables ========================================================================== */
/** * Remove most spacing between table cells. */
table{border-collapse:collapse;border-spacing:0;}
td,th{padding:0;}