<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script src="jquery-2.0.3.min.js" type="text/javascript"></script>
<script>
//Figure out what browser is being used (Fixed the issue jquery version after 1.9)
$.browser = {
mozilla : /firefox/.test(navigator.userAgent.toLowerCase()),
webkit : /webkit/.test(navigator.userAgent.toLowerCase()),
opera : /opera/.test(navigator.userAgent.toLowerCase()),
msie : /msie/.test(navigator.userAgent.toLowerCase()),
};
</script>
<script>
/**
* 自定义插件:实现在浏览器中定位窗口的位置 这里根据用户传过来的参数进行设置窗口的位置(上下左右4个角落以及中间)
*
* @param height
* 窗体高度,如400(建议不带单位,默认为px)
* @param width
* 窗体宽度,如600(建议不带单位,默认为px)
* @param title
* 窗体顶端的标题
* @param message
* 窗体显示的内容
* @param left
* 表示窗口水平位置-->可选值:"center"、"left"、"right"、具体的数值,如:200
* @param top
* 表示窗口垂直位置-->可选值:"center"、"top"、"bottom"、具体的数值,如:300
* @param type
* 表示类型
* 可选值:"default"、"rollup"。default--->表示默认的,没有动画。rollup--->表示在右下角滑上来(像QQ消息提示框一样)
*
*/
$.fn.popUpWin = function(args) {
var currentWin = this; // 将当前对象设置成currentWin,以方便使用
var windowObj = $(window); // 转化window为JQuery对象
var winWidth = 600; //windos's width
var winWidthUnit = '600px'; //width with unit
var winHeight = 400; //windows's height
var winHeightUnit = '400px'; //width with unit
var browserWidth = windowObj.width(); // 浏览器的宽
var browserHeight = windowObj.height(); // 浏览器的高
var scrollLeft = windowObj.scrollLeft(); // 获取滚动条的左边距(滚动条里最左端的差距)
var scrollTop = windowObj.scrollTop(); // 获取滚动条的上边距
var winLeft; // 窗口的左边距
var winTop; // 窗口的上边距
var positionLeft;
var positionTop;
var title = 'Message Dialog';
var message = 'No message show up!';
var type; //窗口类型
//check if it is a number
function isNumber(tester){
var re = /\D+/;
return !re.test(tester);
}
//get number from strig such as 600px will return 600
function getNumber(str) {
var re = /^\d+/;
return str.match(re);
}
function getUnion(str) {
var re = /\D+/;
return str.match(re);
}
// init params
if (args && args instanceof Object) {
if(args.height && args.height!=''){
if(isNumber(args.height)){
winWidth = args.height;
winWidthUnit = args.height + 'px';
} else {
winWidth = getNumber(args.height);
winWidthUnit = args.height;
}
}
if(args.width && args.width!=''){
if(isNumber(args.width)){
winWidth = args.width;
winWidthUnit = args.width + 'px';
} else {
winWidth = getNumber(args.width);
winWidthUnit = args.width;
}
}
if(args.title && args.title!='') {
title = args.title;
}
if(args.message && args.message!=''){
message = args.message;
}
if(args.type && args.type!='') {
type = args.type;
}
if(args.left && args.left!='') {
positionLeft = args.left;
}
if(args.left && args.top!='') {
positionTop = args.top;
}
}
/*
* init component
*/
function initComponent(){
var appendStr = "<div class='pop_up_title'><span class='pop_up_cls'><input type='button' value='Close'/></span><span class='pop_up_txt'>"
+ title
+ "</span></div><hr color='#0099FF'/><div class='pop_up_content'><span class='pop_up_content_txt' style='"
+ (winHeight-50)
+ getUnion(winHeightUnit) + ";'>"
+ message
+ "</span></div>";
currentWin.addClass("pop_up_window");
currentWin.css( {
"width" : winWidthUnit,
"height" : winHeightUnit
});
currentWin.append(appendStr);
}
// init component
initComponent();
// 处理水平位置的参数
function calLeft(positionLeft, scrollLeft, browserWidth, winWidth) {
if (positionLeft && typeof positionLeft == "string") { // 判断参数为字符串
if (positionLeft == "center") { // left参数为center,则水平居中
winLeft = (browserWidth - winWidth) / 2 + scrollLeft;
} else if (positionLeft == "left") { // left参数为left,则水平居左
winLeft = scrollLeft;
} else if (positionLeft == "right") { // left参数为right,则水平居右
winLeft = scrollLeft + browserWidth - winWidth;
} else { // 用户输入了其他字符串,则改为默认居中
winLeft = (browserWidth - winWidth) / 2 + scrollLeft - 30;
}
} else if (positionLeft && typeof positionLeft == "number") { // 判断参数为数值,则根据数值直接设置
winLeft = positionLeft;
} else { //其他情况,默认居中。如:没有输入该参数或非法字符
winLeft = (browserWidth - winWidth) / 2 + scrollLeft;
positionLeft = "cneter";
}
}
// 处理垂直位置的参数
function calTop(positionTop, scrollTop, browserHeight, winHeight) {
if (positionTop && typeof positionTop == "string") {
if (positionTop == "top") {
winTop = scrollTop;
} else if (positionTop == "center") {
winTop = (browserHeight - winHeight) / 2 + scrollTop;
} else if (positionTop == "bottom") {
winTop = scrollTop + browserHeight - winHeight;
} else {
winTop = (browserHeight - winHeight) / 2 + scrollTop;
}
} else if (positionTop && typeof positionTop == "number") { // 判断参数为数值,则根据数值直接设置
winTop = positionTop;
} else {
winTop = (browserHeight - winHeight) / 2 + scrollTop;
positionTop = "center";
}
}
// *******这里很重要,将传过来的参数缓存在data.positionLeft中,这样做是为了在后面滚动条滚动或浏览器大小改变时使用,这里有点像java中的hashMap
currentWin.data("positionLeft", positionLeft); // 缓存数据
currentWin.data("positionTop", positionTop); // 缓存数据
// 移动窗口,此方法仅供滚动条滚动以及窗口大小时使用,不适合初始化(就是在加载页面时,调用了该插件)时使用,因为一开始不存在currentWin.data("positionLeft")和currentWin.data("positionTop")的值
function moveWin() {
// 重新获取一些值并调用响应的内部函数进行设置
var browserWidth = windowObj.width(); // 浏览器的宽
var browserHeight = windowObj.height(); // 浏览器的高
var scrollLeft = windowObj.scrollLeft(); // 获取滚动条的左边距(滚动条里最左端的差距)
var scrollTop = windowObj.scrollTop(); // 获取滚动条的上边距
// 调用方法重新计算左边距和上边距
calLeft(currentWin.data("positionLeft"), scrollLeft, browserWidth,
winWidth);
calTop(currentWin.data("positionTop"), scrollTop, browserHeight,
winHeight);
// 设置窗口位置
currentWin.animate( {
"left" : winLeft,
"top" : winTop
}, 200); // 注意:currentWin在css定义中一定要注明position:absolute;
}
//窗口类型
if(type && type == "rollup"){ //这里实现像QQ消息框效果,在右下角滑上来,并慢慢淡出
//如果窗口可见,将其设置成隐藏
if(currentWin.is(":visible")){
currentWin.hide();
}
calLeft(positionLeft, scrollLeft, browserWidth, winWidth);
calTop(positionTop, scrollTop, browserHeight, winHeight);
var left = winLeft;
if($.browser.mozilla){ //修正firefox左边距
left = winLeft-10;
}
currentWin.css( {
"left" : left,
"top" : winTop + winHeight
});
currentWin.show(500).animate( {
"top" : winTop
}, 500)
var fadeOutTimeOut;
clearTimeout(fadeOutTimeOut); // 先清除所有延时,以免重复叠加
fadeOutTimeOut = setTimeout(function() {
currentWin.fadeOut(25000).dequeue();//15秒淡出 《dequeue():去除动画队列中第一个动画,但该动画仍会继续执行,这样能保证后面的动画不需要等到第一个动画执行完才执行,这样可以防止在滚动条滚动时能在淡出的同时也能移动位置》
}, 3000); // 3秒后开始淡出
//鼠标悬停在窗口上,取消隐藏
currentWin.mouseover(function(){
if(!currentWin.is(":visible")){ //若窗口本身为不可见时不执行后面两句语句
return;
}
currentWin.stop(true,true);
currentWin.fadeIn(0);
});
//鼠标移开,3秒后再次隐藏
currentWin.mouseout(function(){
if(!currentWin.is(":visible")){
return;
}
clearTimeout(fadeOutTimeOut); // 先清除所有延时,以免重复叠加
fadeOutTimeOut = setTimeout(function() {
currentWin.fadeOut(25000).dequeue();
}, 3000);
});
} else { //普通情况
calLeft(positionLeft, scrollLeft, browserWidth, winWidth);
calTop(positionTop, scrollTop, browserHeight, winHeight);
currentWin.css( {
"left" : winLeft,
"top" : winTop
});
currentWin.show("slow"); //显示窗口
}
// 为当前窗口注册滚动条滚动事件,在滚动条滚动时能够动态改变窗口的位置
windowObj.scroll(function() {
if (!currentWin.is(":visible")) {
return;
}
var scrollTimeOut; // 延时处理,由于拉动滚动条时不断改变窗口位置会导致浏览器会一闪一闪,所以通过延时修改
clearTimeout(scrollTimeOut); // 先清除所有延时,以免重复叠加
scrollTimeOut = setTimeout(function() {
moveWin();
}, 300); // 延时300毫秒
});
// 为当前窗口注册浏览器大小改变事件
windowObj.resize(function() {
if (!currentWin.is(":visible")) { // 判断若当前窗口为不可见则不进行该事件的处理
return;
}
moveWin();
});
// 注册关闭窗口事件
$(currentWin).find("span[class='pop_up_cls']").click(function() {
$(currentWin).fadeOut(0);
});
return currentWin;
}
</script>
<script>
function load(){
$("#test").popUpWin({
title: "testing",
message: "testing message!",
width:'600px',
height: '400px',
left:'center',
top:'center'
});
}
</script>
<style>
/*整个窗体的样式*/
.pop_up_window{
/*background-color:#D0DEF0;*/
/*width:600px;
height:400px;*/
border:5px solid #B3D9FF;
margin:0px;
display:none;
position: absolute;
z-index:999;
}
/*窗体内容区的样式*/
.pop_up_content{
background-color:#FFF;
width:100%;
height:350px;
/* position:relative;*/
}
/*窗体标题栏的样式*/
.pop_up_title{
marging:0;
padding:0;
border:0;
width:100%;
height:25px;
background:#FFF;
font-size:14px;
font-weight:bold;
}
/*窗体标题右侧图片的样式*/
.pop_up_title .pop_up_cls{
padding:0;
margin-top:3px;
width:65px;
height:25px;
overflow:hidden;
display:block; /*一定要设置成block不然不会显示*/
float:right;
}
/*窗体标题文字的样式*/
.pop_up_title .pop_up_txt{
display:block;
height:25px;
line-height:25px;
margin-left:5px;
}
/*内容区文本(主体文本)*/
.pop_up_content_txt{
marging:0;
padding:0 5px;
display:block;
/*height:350px;*/
background:#CBE7FC;
overflow:auto; /*这里设置的auto是为了当要显示的内容过多时,会自动出现滚动条*/
}
</style>
</head>
<body onload="load()">
<div id="test">
</div>
</body>
</html>
jquery confirm 自定义按钮文字 jquery自定义弹窗
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
SpringBoot自定义starter
SpringBoot自定义starter
spring maven ci -
jquery移动端自定义选择控件 jquery自定义弹窗
简单演示一下,精简了演示效果和css样式文件,更利于在项目中的实际应用引入style.css index.js<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>index.html</title>
jquery移动端自定义选择控件 javascript ViewUI html jQuery