yuanweisen

 

鼠标提示功能

该功能就是一篇文章中有很多关键词用户不明白是什么意思,那么在系统中创建一个字典,凡是在字典中的关键字,都要设置样式并下拉链接,点鼠标移动到该词上面后,显示出字典里的链接解释,如图所示

该功能主要用到的技术有,javascript,CSS以及ajax

1 首先先要创建字典,这个比较简装,不做详细记录,反正就是在数据库中存在字典与解释就OK了。

2 文章显示出来后所有和字典里的关键字能对应上的字符,都要加链接,设置样式。这是由JS来实现的代码如下:

function displays()
 {
 document.getElementById("txt").innerHTML=document.getElementById("txt").innerHTML.replace(/(咳嗽|dsfdf|产生)/gi,"<a href='#' title='$1' onmouseout=out() onmouseover=show('$1')>$1</a>");
 }

文件名为MounseDisplay.js

其中标红的是字典里的关键字,该段代码表示ID为txt的控件内(为一个层)的字符的html编码设置正则表达式格式,所有在正则表达式字符串内的字符,都要加链接,加title(鼠标移动到该词的样式),鼠标移开的事件,因为该函数是独立的一个JS文件,所以要在所用到的页面加引用,代码如下

 <script language="javascript" type="text/javascript" src="http://www.cnblogs.com/js/MouseDisplay.js"></script>
   <script language="javascript" type="text/javascript" src="http://www.cnblogs.com/js/show.js"></script>

特别说明,这两段引用代码要加在body之下

这些仅仅使文章里的关键字出现链接,但要显示该关键字所指示出的解释内容,还要看show.js文件,代码如下 :

 

function show(keys)
{
//先设置用来显示解释的层的位置为绝对位置
document.getElementById("Dic_Txt").style.position='absolute';
//再把该层的位置置为鼠标当前的位置(因为就是要显示到鼠标旁边)
            document.getElementById("Dic_Txt").style.top=window.event.y;
            document.getElementById("Dic_Txt").style.left=window.event.x+10;
            //异步传输数据
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    xmlhttp.onreadystatechange=statechangeLoad;
    //打ViewDicTxt.aspx文件得到解释数据
   xmlhttp.open("GET","ViewDicTxt.aspx?Dic_Title="+encodeURI(keys),true);
   xmlhttp.send(null);

  
}

function statechangeLoad()
{
    if (xmlhttp.readystate==4)
    {
        if (xmlhttp.status==200)
        {
           
            //给页面的层付值(该词的解释数据),并把该层置为可见
            document.getElementById("Dic_Txt").innerHTML=xmlhttp.responseText;
            document.getElementById("Dic_Txt").style.display="";
        }
    }
}

function out()
{
//层不可见
    document.getElementById("Dic_Txt").style.display="none"
}

先说简单的吧,函数out()就是把该层引荐掉

函数show(keys)里的keys是传入的关键字符,这个函数用到了ajax,因为打开页面ViewDicTxt.aspx用url传的值会是中文,会出现乱码现像,而到了页面ViewDicTxt.aspx后就会被系统屏掉,所以用到了编码和解码,encodeURI(keys)就是JS的编码。咱们再看ViewDicTxt.aspx文件的代码,ViewDicTxt.aspx文件的html代码除了第一行外,已经全部被删掉了,只有CS里的代码

 

 protected void Page_Load(object sender, EventArgs e)
        {
            //接到url传来的字符
            string DicTitle = Request.QueryString["Dic_Title"].ToString();
            //解码
            DicTitle = System.Web.HttpUtility.UrlDecode(DicTitle, System.Text.Encoding.GetEncoding("GB2312"));
            //得到数据源
            DataSet ds = new DataSet();
            ds = Business.Dictionary.GetList(" Dic_Title='" + DicTitle + "'");
            string a=ds.Tables[0].Rows[0]["Dic_Content"].ToString();
            //输出想要的结果
            Response.Write(ds.Tables[0].Rows[0]["Dic_Content"].ToString());

        }

 

当然了,这里面最重要的是解码

posted on 2008-11-23 17:09    阅读(334)  评论(0编辑  收藏  举报

导航