DooIT@江西搜才网

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  49 随笔 :: 17 文章 :: 1146 评论 :: 28 引用
  • 纯js编写
  • 跨框架
  • 无图片
  • 支持调速度
  • 任意位置弹出
  • 需要ie5.5以上
<HTML><HEAD> 
<SCRIPT language=JavaScript>  
<!--  
  
/*  
**    ==================================================================================================  
**    类名:CLASS_MSN_MESSAGE  
**    功能:提供类似MSN消息框  
**    示例:  
    ---------------------------------------------------------------------------------------------------  
  
            var MSG = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","今天请我吃饭哈");  
                MSG.show();  
  
    ---------------------------------------------------------------------------------------------------  
**    作者:ttyp  
**    邮件:ttyp@21cn.com  
**    日期:2005-3-18  
**    ==================================================================================================  
*
*/
  
  
  
/*  
 *    消息构造  
 
*/
  
function CLASS_MSN_MESSAGE(id,width,height,caption,title,message,target,action){  
    
this.id     = id;  
    
this.title  = title;  
    
this.caption= caption;  
    
this.message= message;  
    
this.target = target;  
    
this.action = action;  
    
this.width    = width?width:200;  
    
this.height = height?height:120;  
    
this.timeout= 150;  
    
this.speed    = 20
    
this.step    = 1
    
this.right    = screen.width -1;  
    
this.bottom = screen.height; 
    
this.left    = this.right - this.width; 
    
this.top    = this.bottom - this.height; 
    
this.timer    = 0
    
this.pause    = false;
    
this.close    = false;
    
this.autoHide    = true;
}
  
  
/*  
 *    隐藏消息方法  
 
*/
  
CLASS_MSN_MESSAGE.prototype.hide 
= function(){  
    
if(this.onunload()){  

        
var offset  = this.height>this.bottom-this.top?this.height:this.bottom-this.top; 
        
var me  = this;  
 
        
if(this.timer>0){   
            window.clearInterval(me.timer);  
        }
  
 
        
var fun = function(){  
            
if(me.pause==false||me.close){
                
var x  = me.left; 
                
var y  = 0
                
var width = me.width; 
                
var height = 0
                
if(me.offset>0)
                    height 
= me.offset; 
                }
 
     
                y  
= me.bottom - height; 
     
                
if(y>=me.bottom)
                    window.clearInterval(me.timer);  
                    me.Pop.hide();  
                }
 else 
                    me.offset 
= me.offset - me.step;  
                }
 
                me.Pop.show(x,y,width,height);    
            }
             
        }
  
 
        
this.timer = window.setInterval(fun,this.speed)      
    }
  
}
  
  
/*  
 *    消息卸载事件,可以重写  
 
*/
  
CLASS_MSN_MESSAGE.prototype.onunload 
= function() {  
    
return true;  
}
  
/*  
 *    消息命令事件,要实现自己的连接,请重写它  
 *  
 
*/
  
CLASS_MSN_MESSAGE.prototype.oncommand 
= function(){  
    
this.close = true;
    
this.hide();  
}
  
  
/*  
 *    消息显示方法  
 
*/
  
CLASS_MSN_MESSAGE.prototype.show 
= function(){  

    
var oPopup = window.createPopup(); //IE5.5+  
    
    
this.Pop = oPopup;  
  
    
var w = this.width;  
    
var h = this.height;  
  
    
var str = "<DIV style='BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX: 99999; LEFT: 0px; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: " + w + "px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 0px; HEIGHT: " + h + "px; BACKGROUND-COLOR: #c9d3f3'>"  
        str 
+= "<TABLE style='BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid' cellSpacing=0 cellPadding=0 width='100%' bgColor=#cfdef4 border=0>"  
        str 
+= "<TR>"  
        str 
+= "<TD style='FONT-SIZE: 12px;COLOR: #0f2c8c' width=30 height=24></TD>"  
        str 
+= "<TD style='PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #1f336b; PADDING-TOP: 4px' vAlign=center width='100%'>" + this.caption + "</TD>"  
        str 
+= "<TD style='PADDING-RIGHT: 2px; PADDING-TOP: 2px' vAlign=center align=right width=19>"  
        str 
+= "<SPAN title=关闭 style='FONT-WEIGHT: bold; FONT-SIZE: 12px; CURSOR: hand; COLOR: red; MARGIN-RIGHT: 4px' id='btSysClose' >×</SPAN></TD>"  
        str 
+= "</TR>"  
        str 
+= "<TR>"  
        str 
+= "<TD style='PADDING-RIGHT: 1px;PADDING-BOTTOM: 1px' colSpan=3 height=" + (h-28+ ">"  
        str 
+= "<DIV style='BORDER-RIGHT: #b9c9ef 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #728eb8 1px solid; PADDING-LEFT: 8px; FONT-SIZE: 12px; PADDING-BOTTOM: 8px; BORDER-LEFT: #728eb8 1px solid; WIDTH: 100%; COLOR: #1f336b; PADDING-TOP: 8px; BORDER-BOTTOM: #b9c9ef 1px solid; HEIGHT: 100%'>" + this.title + "<BR><BR>"  
        str 
+= "<DIV style='WORD-BREAK: break-all' align=left><A href='javascript:void(0)' hidefocus=true id='btCommand'><FONT color=#ff0000>" + this.message + "</FONT></A></DIV>"  
        str 
+= "</DIV>"  
        str 
+= "</TD>"  
        str 
+= "</TR>"  
        str 
+= "</TABLE>"  
        str 
+= "</DIV>"  
  
    oPopup.document.body.innerHTML 
= str; 
    
  
    
this.offset  = 0
    
var me  = this;  

    oPopup.document.body.onmouseover 
= function(){me.pause=true;}
    oPopup.document.body.onmouseout 
= function(){me.pause=false;}

    
var fun = function(){  
        
var x  = me.left; 
        
var y  = 0
        
var width    = me.width; 
        
var height    = me.height; 
 
            
if(me.offset>me.height)
                height 
= me.height; 
            }
 else 
                height 
= me.offset; 
            }
 
 
        y  
= me.bottom - me.offset; 
        
if(y<=me.top)
            me.timeout
--
            
if(me.timeout==0)
                window.clearInterval(me.timer);  
                
if(me.autoHide){
                    me.hide(); 
                }

            }
 
        }
 else 
            me.offset 
= me.offset + me.step; 
        }
 
        me.Pop.show(x,y,width,height);    
 
    }
  
  
    
this.timer = window.setInterval(fun,this.speed)      
  
     
  
    
var btClose = oPopup.document.getElementById("btSysClose");  
  
    btClose.onclick 
= function(){  
        me.close 
= true;
        me.hide();  
    }
  
  
    
var btCommand = oPopup.document.getElementById("btCommand");  
    btCommand.onclick 
= function(){  
        me.oncommand();  
    }
    
}
  
/* 
** 设置速度方法 
*
*/
 
CLASS_MSN_MESSAGE.prototype.speed 
= function(s)
    
var t = 20
    
try 
        t 
= praseInt(s); 
    }
 catch(e){} 
    
this.speed = t; 
}
 
/* 
** 设置步长方法 
*
*/
 
CLASS_MSN_MESSAGE.prototype.step 
= function(s)
    
var t = 1
    
try 
        t 
= praseInt(s); 
    }
 catch(e){} 
    
this.step = t; 
}
 
  
CLASS_MSN_MESSAGE.prototype.rect 
= function(left,right,top,bottom)
    
try 
        
this.left        = left    !=null?left:this.right-this.width; 
        
this.right        = right    !=null?right:this.left +this.width; 
        
this.bottom        = bottom!=null?(bottom>screen.height?screen.height:bottom):screen.height; 
        
this.top        = top    !=null?top:this.bottom - this.height; 
    }
 catch(e){} 
}
 
var MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","今天请我吃饭哈");  
    MSG1.rect(
null,null,null,screen.height-50); 
    MSG1.speed    
= 10
    MSG1.step    
= 5
    
//alert(MSG1.top); 
    MSG1.show();  
 
//同时两个有闪烁,只能用层代替了,不过层不跨框架 
//
var MSG2 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有2封消息","好的啊");  
//
   MSG2.rect(100,null,null,screen.height); 
//
    MSG2.show();  
//
-->  
</SCRIPT> 
 
<META content="MSHTML 6.00.2800.1106" name=GENERATOR></HEAD> 
<BODY></BODY></HTML> 
欢迎访问江西搜才网
posted on 2005-03-18 14:45 ttyp 阅读(15725) 评论(132) 编辑 收藏

评论

#33楼 2006-02-27 17:58 阳光男孩      
为什么有时候弹不出来呀,我的是IE6,有时候可以弹出来,
 回复 引用 查看   

#34楼 2006-02-28 09:05 听棠.NET      
楼主说的很对啊,此弹出窗口的最大优点就是popup弹出,可以随时弹出来,而这同时也遇到一个问题,如果我的网页上使用了模式对话框就麻烦了。无法抢得焦点,而在关闭模式对话框时,会弹出N多的消息来。

关于有两个消息弹出时,既然不能象MSN一样层叠出现,那么可以使用延迟弹出,程序在发现有两个以上消息要弹出时,可以输出客户端脚本来延迟执行,setTimeout("Message(..)","5000");象这样五秒后弹出来:)

我就是实现了这种方式,还算不错:)暂时这样解决是最好的了。
 回复 引用 查看   

#35楼 2006-02-28 09:14 阳光男孩      
各位有遇到过有时不能弹出的现象吗,我碰到的情况是第一次打开那网页不行,第二次就可以正常弹出,请问楼主这是什么原因呀,该不会与缓存有关吧!
 回复 引用 查看   

#36楼[楼主] 2006-02-28 09:29 ttyp      
@听棠.NET
像多个弹出的,我是在弹出提示前,做了个标记,在这个标记为真前,不读取下一个提示内容,在弹出提示消失后在设置此标记为假,然后读取下一条记录,当然延迟也不错,不过延迟的时间要大于提示的显示时间

@阳光男孩
一般是你程序的问题,可能第一次没执行到那
 回复 引用 查看   

#37楼 2006-03-06 16:07 阳光男孩      
OK,搞定,果然是我程序问题,谢谢楼主!
 回复 引用 查看   

#38楼 2006-03-23 17:21 1111[未注册用户]
&#25105&#26159&#27004&#20027&#30340&#20799&#23376
 回复 引用   

#39楼 2006-04-25 22:17 jbas[未注册用户]
ttyp 老大,
你好,我想实现当上一个提示框没消失前,下一下提示框不显示出来 这样的效果,但下面的代码会使提示框不停的闪铄,请问我该怎样做?
popup.js是你上面的代码,我把它放到了一个 js中,我不知道该怎样改,改了一晚上还没改出来,请帮一下了,谢谢了。

<html>
<script src="include/js/popup.js"></script>

<SCRIPT LANGUAGE="JavaScript">
<!--
function popupHint(){
var MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","今天请我吃饭哈");
MSG1.rect(null,null,null,screen.height-20);
MSG1.speed = 10;
MSG1.step = 5;
//alert(MSG1.top);
MSG1.show();
te=true;
//同时两个有闪烁,只能用层代替了,不过层不跨框架
//var MSG2 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有2封消息","好的啊");
// MSG2.rect(100,null,null,screen.height);
// MSG2.show();
//-->
}
//-->
</SCRIPT>

<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
setInterval("popupHint()",1000);
// popupHint();
//-->
</SCRIPT>
</body>
</html>
 回复 引用   

#40楼 2006-04-27 18:25 jbas[未注册用户]
我这样改了下,好像可以了。
<html>
<script src="include/js/popup.js"></script>

<SCRIPT LANGUAGE="JavaScript">
<!--
var MSG1;
function popupHint(){
if(MSG1==undefined || MSG1.close){
MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","今天请我吃饭哈");
MSG1.rect(null,null,null,screen.height-20);
MSG1.speed = 10;
MSG1.step = 5;
//alert(MSG1.top);
MSG1.show();
}

//同时两个有闪烁,只能用层代替了,不过层不跨框架
//var MSG2 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有2封消息","好的啊");
// MSG2.rect(100,null,null,screen.height);
// MSG2.show();
//-->
}
//-->
</SCRIPT>

<body>
<SCRIPT LANGUAGE="JavaScript">
<!--
setInterval("popupHint()",2000);
// popupHint();
//-->
</SCRIPT>
</body>
</html>

popup.js中的

/**//*
* 消息卸载事件,可以重写
*/
CLASS_MSN_MESSAGE.prototype.onunload = function() {
this.close=true; //加了这一句
return true;
}
 回复 引用   

#41楼 2006-07-29 18:59 单凯[未注册用户]
我看到评论有很多评论,你也有修改,但不知道你上面的是不是最新的。如果不是,请发给我一份最新的。
 回复 引用   

#42楼 2006-07-29 23:00 单凯[未注册用户]
如何播放音乐????
 回复 引用   

#43楼 2006-08-01 12:46 高海东      
楼住目前的js是最新的吗
 回复 引用 查看   

#44楼[楼主] 2006-08-02 17:56 ttyp      
都是最新的
 回复 引用 查看   

#45楼 2006-08-16 09:24 阳光男孩      
楼主,我想请问一下,点击那个关闭按钮后执行一个事情,我想跳到别的页面做个事情,还有,我想弹出后就不关闭了,一直到用户点击那个关闭按钮,如果实现呀,还有,俺想实现多个窗口弹出,怎么设置,真诚的期待楼主回复,jxdyzwh@163.com
 回复 引用 查看   

@ttyp
这类写的太漂亮了。。
就是能兼容FF就完美了。。

FF兼容多窗口的代码
什么时候同来啊,,
期待中。。。

感觉楼主 写出这么好的东东,,
楼主幸苦了。。。。
 回复 引用   

#47楼 2006-09-17 12:36 红豆[未注册用户]
楼主,我想请都教一下如果我使用xmlhttp来从数据库里面最消息,该怎么做呀,能个详细的例子吗?谢谢了!
 回复 引用   

经典!我也正在研究。
 回复 引用   

请教楼主一个问题,我把这个消息提示类放在了一个即时刷新的页面中,隔很短的时间就刷新一下页面,如果是有新的邮件、代办任务等会弹出提示。我用了jbas的方法,就是上一个提示框没消失前,下一个提示框不显示出来,但是感觉到弹出筐间隔的时间太短了,刚消失立刻就会弹出来,非常的不方便,请问消失的时间能设定吗,我的js很差,最好楼主能帮忙写一下代码,或者能提供一种别的思路。因为弹出了消息,我点了链接之后要在主页面上做一些操作,弹出的窗口导致不能在主页面上操作。
 回复 引用   

#50楼 2006-11-10 16:35 Nina      
怎麼樣讓這個js在所有的頁面讀可以執行,而不是單一的頁面?
 回复 引用 查看   

#51楼 2006-11-10 16:36 Nina      
裡面的內容也其它都是要根據情形來更改。
 回复 引用 查看   

#52楼[楼主] 2006-11-10 16:52 ttyp      
学习AJAX吧,配合后台
 回复 引用 查看   

#53楼 2006-11-17 21:00 功夫-皇帝      
菜鸟问题
我在 VS2005中直接拖上你的控件 设置TEXT 后,预览 ,,什么也没有
需要在后台写些东西吗 我在PAGELOAD 中写了popup.createPop(); Y也不行啊
楼主解决下 谢谢
 回复 引用 查看   

#54楼[楼主] 2006-11-17 21:51 ttyp      
这个不是控件,需要写js的,参考例子
 回复 引用 查看   

请教一下!如果 我想让 提醒框 在页面上多停留一些时间!要改哪个参数啊?
谢谢?
 回复 引用   

#56楼[楼主] 2006-12-11 08:31 ttyp      
this.timeout= 150;
 回复 引用 查看   

#57楼 2006-12-18 18:19 guoguo[未注册用户]
按你上面的方法,点击 弹出链接 可是却被 xp sp2拦截了
请问该怎么处理
 回复 引用   

#58楼[楼主] 2006-12-18 18:22 ttyp      
加上
<!-- saved from url=(0013)about:internet -->
看看,据说行,没测试过
 回复 引用 查看   

您好,我想请问您个问题(我是js菜鸟)
  我把你的这个js ,存到message.js文件中,在我用的run.jsp页面中导入,
当我点击我先把是否点击的标记传给run.jsp,我在jsp中是这样调用的
<script language="javascript">


/**
** reShow message
**/
var MSG1;
function popupHint(messStr,methodStr){
if(MSG1 == undefined || MSG1.close){
MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封新的消息",messStr,methodStr);
MSG1.rect(null,null,null,screen.height-20);
MSG1.speed = 10;
MSG1.step = 5;
MSG1.show();
if(MSG1.close ==true)
myMethod();//我的方法

}
}
</script>

我在oncommand着个方法把
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
this.setClose(window.confirm(this.message));//是否点击的标记
this.hide();
}

可是这样不能调用我的方法,因为在我点消息之前这段代码就已经执行完了,所以判断的不对,请问怎么搞
 回复 引用   

#60楼[楼主] 2006-12-27 11:46 ttyp      
CLASS_MSN_MESSAGE.prototype.onunload = function() {
myMethod();//我的方法
return true;
}
 回复 引用 查看   

您说的意思我明白,但我不把myMethod()放在onunload 方法里,放在oncommand也可以,我想请问我要想不把myMethod()写死在我的message.jsp里.想通过传方法名的这样的参数,在oncommand或onunload 这里调用,或者想我原来的思路给我页面传个反馈值,该怎么办,谢谢您刚才的解答
 回复 引用   

不好意思message.jsp->message.js
 回复 引用   

#63楼[楼主] 2006-12-27 13:28 ttyp      
是不是这个意思?

如:

CLASS_MSN_MESSAGE.prototype.oncommand = function()
{
window.open(this.action,this.target);
this.hide();
}

var MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","今天请我吃饭哈","_blank","http://www.google.com");
MSG1.rect(null,null,null,screen.height-50);
MSG1.speed = 10;
MSG1.step = 5;
MSG1.show();



看看CLASS_MSN_MESSAGE后面两参数
 回复 引用 查看   

hehe,这个我看过之前的贴子了,确实很好,但这个方法好象不适合我,因为我的页面是用struts写的,不想用url访问,意思很象
 回复 引用   

#65楼[楼主] 2006-12-27 13:56 ttyp      
那你要怎么访问?要不你自己加个参数(不一定非要连接),然后在oncommand里根据参数,你想怎么样怎么样
 回复 引用 查看   

通过表单提交,不想用类似window.open(this.action,this.target);这样的方法,我的myMethod()里基本就是赋值,提交表单.
java 中可以传一个方法名字符串,通过Class类(省略)完成调用,不知道js要怎么搞
 回复 引用   

#67楼[楼主] 2006-12-27 14:27 ttyp      
不明白,抱歉
 回复 引用 查看   

仍然感谢你的回复,你的这个程序写的确实很好,给了我不少帮助,让我对js有了了解,有机会再请教.谢谢
 回复 引用   

你好,请问为什么我同时出两个窗口就不停的闪,要怎么搞定,是不是你所说的挣抢焦点,我象
CLASS_MSN_MESSAGE.prototype.onunload = function() {
this.close=true; //加了这一句
return true;
}
这样写,也不行
 回复 引用   

你所说的层解决方案要怎么搞
 回复 引用   

#71楼[楼主] 2006-12-27 19:42 ttyp      
是抢焦点的问题,用层的方案一直没时间做。另外用层不能跨框架
 回复 引用 查看   

哦,苦恼啊,js好难搞,呵呵谢谢
 回复 引用   

老兄!还得麻烦你,
"像多个弹出的,我是在弹出提示前,做了个标记,在这个标记为真前,不读取下一个提示内容,在弹出提示消失后在设置此标记为假,然后读取下一条记录,当然延迟也不错,不过延迟的时间要大于提示的显示时间"

我觉得第 1 个方式很好,但我不知道怎么修改,搞了一会没出来,而且延迟也试了,但有脚本错误,估计可能没用对,请指教,如果你有时间,希望说的详细点,先谢了
 回复 引用   

#74楼[楼主] 2006-12-28 15:52 ttyp      
var i = 0;
var RUN = false;

function QueryMessage(){

if(RUN==false){

if(RUN==false){

RUN = true;

var msg = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:",sendFrom,message);
msg.rect(null,null,null,screen.height-50);
msg.speed = 40;
msg.step = 2;
msg.show();

}

}

}

function ShowMessage(){

var oInterval;
//定时查询是否有消息
oInterval = window.setInterval("QueryMessage()",10000);

CLASS_MSN_MESSAGE.prototype.onend = function() {
RUN = false;
}

if(typeof(oInterval)=="undefined"){
document.title = "显示消息失败";
}
}

window.attachEvent("onload",ShowMessage);

参考下吧,我这边是这么做的
 回复 引用 查看   

谢谢 你的提醒,
1.我还想请问你,你的多条消息是不是1个sql出来的消息,只不过是间隔显示,还是说可以适应不同的消息,同时来.
2.我原来做的是在hide方法的最后,调用类似QueryMessage的方法,用来生成下一个窗口,可是这么做,第一个还没消失完全,第2个就出来了,有一段时间挣抢了焦点,能通过什么方式解决么
3.还有我要想让显示的慢点,消失的快点,要怎么搞,是不hide 方法 this.timer = window.setInterval(fun,this.speed) 这句this.speed修改一下,如写死成1,我改后为什么没效果?
 回复 引用   

#76楼[楼主] 2006-12-29 12:32 ttyp      
1.我用的是AJAX,每次取一条最新的数据
2.你在CLASS_MSN_MESSAGE.prototype.onend 里做个标记,然后判断这个标记再创建新的MESSAGE,就不会第一个还没消失完全,第2个就出来了
3.CLASS_MSN_MESSAGE.prototype.hide里
me.offset = me.offset - me.step;
你改下,如:(或者再定义个step2属性,具体看着办了)
me.offset = me.offset - me.step*1.5;
 回复 引用 查看   

thank you
 回复 引用   

麻烦帮个忙,我为消息添加声音,加到了str这里,但他消失的时候他又响了一次,怎么解决啊
 回复 引用   

#79楼 2007-03-11 21:11 晓风残月      
Cool, thx!
 回复 引用 查看   

#80楼 2007-03-12 00:37 晓风残月      
@ttyp
根据这个DEMO可以间断显示消息,

可是点击‘关闭’按钮后或者点击浏览器的其他部位,并不是马上就消失,而且要点上5,6次才消失

而且根据上面的源码,这DEMO中的CLASS_MSN_MESSAGE.prototype.onend 应该是
CLASS_MSN_MESSAGE.prototype.onunload 吧

// DEMO

var i = 0;
var RUN = false;

function QueryMessage(){

if(RUN==false){

if(RUN==false){

RUN = true;

var msg = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:",sendFrom,message);
msg.rect(null,null,null,screen.height-50);
msg.speed = 40;
msg.step = 2;
msg.show();

}

}

}

function ShowMessage(){

var oInterval;
//定时查询是否有消息
oInterval = window.setInterval("QueryMessage()",10000);

CLASS_MSN_MESSAGE.prototype.onend = function() {
RUN = false;
}

if(typeof(oInterval)=="undefined"){
document.title = "显示消息失败";
}
}

window.attachEvent("onload",ShowMessage);
 回复 引用 查看   

#81楼[楼主] 2007-03-12 09:04 ttyp      
@晓风残月
1.不消失的原因是当show一个popup后,他总是抢焦点的,并且总是在最上面的
2.不是onunload,onend是我项目里加的一个事件,是指整个消息框结束后的一个事件,onunload是指是否允许关闭的一个事件
 回复 引用 查看   

@ttyp
————————————————
1.不消失的原因是当show一个popup后,他总是抢焦点的,并且总是在最上面的
————————————————

那这个问题怎么处理?
 回复 引用   

#83楼 2007-03-19 17:46 dino[未注册用户]
如果我要在里面再加一个checkbox框,并且选中时触发一些事情该如何做?
 回复 引用   

#84楼 2007-03-29 13:44 杨军
我想用ajax做个这样的信息弹出框,但是每次的信息是查询数据库,如果数据库里有,就弹出信息框,请问那位高手能给个例子吗?
 回复 引用   

#85楼 2007-04-10 16:32 ???[未注册用户]
我能链接提交到其他的frame中么?
 回复 引用   

测试了,可以的。
this.target = top.frames.***.name;
 回复 引用   

多链接的实现还是比较麻烦!
ttyp 有什么好的办法么?
 回复 引用   

#88楼[楼主] 2007-04-11 16:12 ttyp      
@http://beyond.name

什么是多链接?指一个提示上有多个链接而且框架不一样么
 回复 引用 查看   

一个提示框内,是一个框架,显示多个链接。
而我们这里是传一个链接进去……
 回复 引用   

ttyp 你有googletalk,msn 或 qq之类的即时联系工具么?
 回复 引用   

#91楼[楼主] 2007-04-12 13:30 ttyp      
@http://beyond.name
可以发邮件给我ttyp@21cn.com,那些东西都不太用
 回复 引用 查看   

用了一个中午看了下,太好了,马上要作这方面的,ttyp有完整的例子吗?给发一份最新的.谢谢!luiguangshui@163.com
 回复 引用   

#93楼 2007-04-24 16:20 cry[未注册用户]
现在这个消息框出来以后,点击这个页面的其他东西,消息框会闪一下。这个能不能解决
 回复 引用   

#94楼 2007-06-17 21:37 Talki[未注册用户]
不错,楼主的东西有些水平
 回复 引用   

#95楼 2007-06-18 16:27 蜗牛[未注册用户]
楼主.现在我不能实现点击链接跳转到相关网页,这是为什么啊?

function load()
{
var aa= "<%=message()%>";
if(aa==1)
{
var info="<%=messageinfo() %>"; var MSG1 = new CLASS_MSN_MESSAGE("aa",200,120,"短消息提示:","您有1封消息","<a href='http://www.163.com'>"+info+"</a>");
MSG1.rect(null,null,null,screen.height-50);
MSG1.speed = 10;
MSG1.step = 5;
MSG1.show();
}
window.setTimeout(load, 60000);
}
</script>

请指点下
 回复 引用   

#96楼 2007-06-22 10:21 xinshou[未注册用户]
如果能从脚本栏目里随时下载最新版本就太好了
 回复 引用   

#97楼 2007-07-06 10:52 贼贼[未注册用户]
大哥,要是我想让popup中超链接可以用,怎么办啊
就是说我想在popup中从数据库取很多数据同时以列表的样子显示出来,我可以通过点列表中的任意数据来查看该数据的详细信息,怎么办,大哥?
 回复 引用   

#98楼 2007-07-06 15:51 jexm[未注册用户]
你好,里边的信息能加连接嘛??
 回复 引用   

点击浏览器的其他部位后,信息提示就会消失。
请问:我要在他消失的事件里改变一个标识,请问如何实现?
 回复 引用   

还有。。为什么点击浏览器的其他部位后,信息提示就会消失???
 回复 引用   

楼主,这个功能,能不能在vs2005 中打包成dll啊 那样使用起来方便些

等你消息哟
 回复 引用   

很帅的msn提示框,收藏了。
 回复 引用   

#103楼 2007-11-10 10:36 passer[未注册用户]
相见恨晚
 回复 引用   

这个提示的很好,但问题是这样的,窗口最小 化时,为什么就无法弹出了,应该怎么处理,
 回复 引用   

#105楼[楼主] 2007-11-13 14:24 ttyp      
@beRaining
没碰到这样的情况,是IE6.0么
 回复 引用 查看   

程序放在另一个人的机子(2003)上,
由我以A的身份在我的机子上登陆,提示运行OK(我的是XP)
然后另外一个用户在其他机子上运行,提示就有问题(其他的是2003)
比如:最小化时,切换到非浏览器界面,都不行
 (我的Q-405935145)
 回复 引用   

#107楼[楼主] 2007-11-14 13:21 ttyp      
是系统问题吧,我也是2003没有问题
 回复 引用 查看   

楼主你好,想问一个问题,就是这个提示窗口没有消失前,窗口的鼠标滚轮就无法用了,这个问题能解决吗?如何解决?
还有就是用ajax读取数据时,在页面里怎么去调用这个程序,而使得他会显示完每一个框后再显示下一个框?
 回复 引用   

楼主,小问一下,这个提示与那个QQ的新闻即时弹出的。。。
它用的是?
 回复 引用   

如果想窗口最小化的时候也弹出的话,是不是要将站点加入到信任站点中?
如果不加入信任站点的话,只能显示在页面中哦,不知道该如何解决
 回复 引用   

楼主两个框闪烁的解决办法时,对跨iframe的调用时似乎有问题。

 回复 引用   

我的解决办法是利用top设置全局环境变量。

if(top){
if(!top.CLASS_MSN_MESSAGE_HOLDER){
top.CLASS_MSN_MESSAGE_HOLDER = function(){};
top.CLASS_MSN_MESSAGE_HOLDER.prototype.showing = false;
}
}
 回复 引用   

退出时重写环境变量:

/**//*
* 消息卸载事件,可以重写
*/
CLASS_MSN_MESSAGE.prototype.onunload = function() {
if(top){
top.CLASS_MSN_MESSAGE_HOLDER.prototype.showing = false;
}
return true;
}
 回复 引用   

进入critical区域的时候,初始化环境变量。

CLASS_MSN_MESSAGE.prototype.show = function(obj){
var me = obj?obj:this;
if(!top.CLASS_MSN_MESSAGE_HOLDER.prototype.showing){
top.CLASS_MSN_MESSAGE_HOLDER.prototype.showing = true;
...
function fTimeout(){
CLASS_MSN_MESSAGE.prototype.show(me);
}
window.setTimeout(fTimeout,1000);
}

注意该函数第第一次进入的时候,this指向CLASS_MSN_MESSAGE的对象实例,第二次由setTimeout调用时,this指向window,因此this这个东西要做转换。
 回复 引用   

本来想一次性把修改后的代码放上来方便大家,没想到提示我提交了一个广告,只能这样分开发对付一下了。
 回复 引用   

您好,我看了您的东西,但是如果有很多个页面打开时,这个消息框不会在最前面显示出来,还有一个就是多个消息的叠加问题,我看您的回复里好象是已经解决了这个问题,请问可以email一份给我吗?谢谢了:mgyisjk@sohu.com
 回复 引用   

这个我可以根据设置时间来弹出这个提示框吗??
 回复 引用   

博主好技术!学了,用了,谢了!
 回复 引用   

使用这个弹窗后,正常页面的鼠标不能使用滚轮了啊,我点击“X”符号,想立即关闭弹出窗口,却关不了??? 请楼主发份给我 谢谢 邮箱:lovehenry84@163.com
 回复 引用   

#120楼 2008-02-19 10:24 jazz[未注册用户]
不错,收藏,以后学习
 回复 引用   

问题如下:
1,不能同时弹出两个,否则会争夺焦点
2,窗口最小化时,该弹出窗口在显示器的左上角,环境:win2K+ie6.0
3,鼠标滚轮不能使用。问lZ是否有解决方法,多谢了!
 回复 引用   

#122楼 2008-05-23 11:13 hw[未注册用户]
不错,学习了,只是点击这个页面的其他东西,消息框会闪一下,这怎么解决
请楼主提点我 谢谢 邮箱:daza315@163.com
 回复 引用   

#123楼 2008-07-17 17:23 冬梅      
原来也有很多人关注这个小心提示框,我的想法和14楼一样,如果能做出来的话,能不能也和我分享一下呀。这几天我找这个实现方法很着急呀。谢谢了。
我的邮箱:jianghsd_2008@yahoo.com
我也会一直关注你的博客园的。
 回复 引用 查看   

LZ可以在写上日期嘛....好方便我们来查询版本-_#...最少也要最后的修改日期是XXX
 回复 引用   

你好,如果有多条信息,对应多个url如何写
 回复 引用   

#126楼 2008-10-28 13:36 问天何必      
足迹
 回复 引用 查看   

#127楼 2009-06-11 17:19 洋娃娃
楼主,您好,想问下,<A href='javascript:void(0)' hidefocus=true id='btCommand'><FONT color=#ff0000>" + this.message + "</FONT></A>,如果我想在function里取a的对象怎么取?
 回复 引用   

太帅了
 回复 引用 查看   

#129楼 2011-04-14 19:14 XIAO☆YE      
要能实现点击消息弹出一个页面要重写这个方法
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
this.close = true;
this.hide();
}
改为这样式式
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
var url='http://www.baidu.com';
window.open(url);
}
 回复 引用 查看   

#130楼 2011-04-14 19:15 XIAO☆YE      
@洋娃娃
要能实现点击消息弹出一个页面要重写这个方法
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
this.close = true;
this.hide();
}
改为这样式式
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
var url='http://www.baidu.com';
window.open(url);
}
 回复 引用 查看   

#131楼 2011-04-14 19:15 XIAO☆YE      
@ttyp
要能实现点击消息弹出一个页面要重写这个方法
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
this.close = true;
this.hide();
}
改为这样式式
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
var url='http://www.baidu.com';
window.open(url);
}
 回复 引用 查看   

#132楼 2011-04-14 19:16 XIAO☆YE      
@听棠.NET
要能实现点击消息弹出一个页面要重写这个方法
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
this.close = true;
this.hide();
}
改为这样式式
CLASS_MSN_MESSAGE.prototype.oncommand = function(){
var url='http://www.baidu.com';
window.open(url);
}
 回复 引用 查看   

评论共2页: 上一页 1 2