首頁 web前端 js教程 JavaScript Title、alt提示(Tips)实现源码解读_javascript技巧

JavaScript Title、alt提示(Tips)实现源码解读_javascript技巧

May 16, 2016 pm 06:14 PM
alt title 提示

而对于图片标签img也有一个alt属性可以起到类似的作用。但很显然这种提示框太单调了,为此有人用JavaScript实现了漂亮的提示框效果,这种效果常用在WEB游戏中,其中下图的网易邮箱与迅雷影视页面就用到这种效果,虽然彼此实现效果有些差异,但整体实现思路是不变的。为了方便大家了解实现的细节,以方便定制自己想要的效果,我上网找了一段不错的源码,并对其进行了详细的注释,希望对大家有帮助。

  
JavaScript Title、alt提示(Tips)实现源码解读_javascript技巧
JavaScript Title、alt提示(Tips)实现源码解读_javascript技巧

含注释代码:
复制代码 代码如下:

/***********************************************
  一个JavaScript Title、alt提示(Tips)源码解读
代码注释:唐国辉
作者博客:http://webflash.cnblogs.com
***********************************************/

//定义getElementById快捷方式
function $(obj)
{
if(typeof(obj)=='object')
{
return obj;
}
else
{
return document.getElementById(obj);
}
}
//定义document.write快捷方式,代替复杂的DOM操作
function $P(str)
{
document.write(str);
}
//脚本错误屏蔽
window.onerror=function ()
{
return true;
};
/*
定义变量:
pltsPop(提示内容文字,来自对象的alt或title属性,不包含HTML)
toolTip(提示内容DOM对象,即后面定义的content变量)
pltsPoptop(上方提示标题DOM对象)
pltsPopbot(下方提示标题DOM对象)
topLeft(左上角提示标题DOM对象)
botLeft(左下方提示标题DOM对象)
topRight(右上角提示标题DOM对象)
botRight(右下方提示标题DOM对象)
*/
var pltsPop,toolTip,pltsPoptop,pltsPopbot,topLeft,botLeft,topRight,botRight;
//设置提示窗口相对提示对象的位置偏移量
var pltsoffsetX=10;
var pltsoffsetY=15;
var pltsTitle="";
//创建一个绝对定位的隐藏图层
$P('');
//把刚创建的层对象赋值给一个变量,此语句一定要出现在层创建之后
var pltsTipLayer=$('pltsTipLayer');
//定义鼠标移到对象上时处理函数,主要提取alt或title属性值,并初始化提示框HTML及样式
function PltsMouseOver(ev)
{
//兼容不同浏览器的事件和对象获取
var Event=window.event||ev;
var o=Event.srcElement||Event.target;
//如果对象alt属性存在并且不等于空,就把它的值存到dypop属性,并清空当前alt内容
if(o.alt!=null&&o.alt!="")
{
o.dypop=o.alt;
o.alt="";
}
//如上,对具有title属性的对象作同样的判断和处理,清空title属性值是让对象默认的提示效果失效
if(o.title!=null&&o.title!="")
{
o.dypop=o.title;
o.title="";
}
pltsPop=o.dypop;
if(pltsPop!=null&&pltsPop!=""&&typeof(pltsPop)!="undefined")
{
//把上面创建的提示层显示出来,暂时移到左边很远,虽然显示但用户看不到
pltsTipLayer.style.left=-1000;
pltsTipLayer.style.display='';
/*
格式化提示信息,把其中的\n换成
,比如像下面这样定义title值,显示出来会是作者和性别各一行,因为Tom和Sex之间有 :
Article title...

*/
var Msg=pltsPop.replace(/\n/g,"
");
Msg=Msg.replace(/\0x13/g,"
");
//定义正则表达式检查提示内容是否含有类似这样的内容“{提示标题}”,而且{}和{{}是排除在处的,如果没有就默认用“简介”作为提示标题
var re=/\{(.[^\{]*)\}/ig;
if(!re.test(Msg))
{
pltsTitle="";
}
else
{
re=/\{(.[^\{]*)\}(.*)/ig;
//提取{}中的内容
pltsTitle=Msg.replace(re,"$1")+" ";
//把{内容},包括{}在内的内容替换为空,得到最终提示正文的内容
re=/\{(.[^\{]*)\}/ig;
Msg=Msg.replace(re,"");
}
//定义提示框内容Html与Style,并把获得的相关内容放到对应变量中
var content="

"+pltsTitle+"

"+pltsTitle+"

"+Msg+"

"+pltsTitle+"

"+pltsTitle+"

";
pltsTipLayer.innerHTML=content;
toolTip=$("toolTip");
pltsPoptop=$("pltsPoptop");
pltsPopbot=$("pltsPopbot");
topLeft=$("topLeft");
botLeft=$("botLeft");
topRight=$("topRight");
botRight=$("botRight");
//设置提示框宽度,它的大小是提示框自身大小和浏览器可见窗口大小一半两者中的最小值,即在浏览器窗口小过提示框本身宽度后,会自动调整提示框大小到一个新的宽度
toolTip.style.width=Math.min(pltsTipLayer.clientWidth,document.documentElement.clientWidth/2.2)+"px";
}
else
{
pltsTipLayer.innerHTML='';
pltsTipLayer.style.display='none';
}
}
//定义鼠标在对象上移动时处理函数,每移动一像素触发一次事件
function PltsMouseMove(ev)
{
if(pltsTipLayer.innerHTML=='')
return true;
var Event=window.event||ev;
//获取光标当前X、Y坐标
var MouseX=Event.clientX;
var MouseY=Event.clientY;
//获取提示框宽高度
var popHeight=pltsTipLayer.clientHeight;
var popWidth=pltsTipLayer.clientWidth;
//如果当前光标Y坐标+提示框Y轴偏移量+提示框高度>当前窗口可见高度,一般处理窗口中下方要提示的对象,比如页脚有一个链接需要提示时就会是这种情况,此时考虑使用下方标题
if(MouseY+pltsoffsetY+popHeight>document.documentElement.clientHeight)
{
//提示框显示在要提示对象上方时需要一个额外值popTopAdjust作为提示框最终定位的依据
popTopAdjust=-popHeight-pltsoffsetY*1.5;
pltsPoptop.style.display="none";
pltsPopbot.style.display="";
}
else
{
popTopAdjust=0;
pltsPoptop.style.display="";
pltsPopbot.style.display="none";
}
//判断使用左标题还是右标题
if(MouseX+pltsoffsetX+popWidth>document.documentElement.clientWidth)
{
popLeftAdjust=-popWidth-pltsoffsetX*2;
topLeft.style.display="none";
botLeft.style.display="none";
//下面两个标题都显示,其实最终看到的只有一个位置上的标题,因为topRight是pltsPoptop的子元素,如果pltsPoptop不显示,topRight显示也是看不到的,botLeft同理
topRight.style.display="";
botRight.style.display="";
}
else
{
popLeftAdjust=0;
topLeft.style.display="";
botLeft.style.display="";
topRight.style.display="none";
botRight.style.display="none";
}
//把综合处理得到的提示框最终位置值设置到对象,其中scrollTop是网页被卷去的高度,因为style.top是相对整个文档的而不是浏览器窗口,所以要算上滚动隐藏的高度,scrollLeft同理
pltsTipLayer.style.left=MouseX+pltsoffsetX+document.documentElement.scrollLeft+popLeftAdjust+"px";
pltsTipLayer.style.top=MouseY+pltsoffsetY+document.documentElement.scrollTop+popTopAdjust+"px";
return true;
}
//定义事件绑定函数
function PltsInit()
{
document.onmouseover=PltsMouseOver;
document.onmousemove=PltsMouseMove;
}
//调用事件绑定函数
PltsInit();

调用方法:把上面的代码存到一个外部独立的JS文件中,然后在网页页面中包含这个JS文件,最后给需要提示的对象加上title属性,图片可以加alt属性就可以了。举例:缩写标题 或 图片提示

相关链接:
1、http://www.cnblogs.com/czh-liyu/archive/2007/12/30/1021146.html
2、http://boxover.swazz.org
3、http://blog.csdn.net/lanmao100/archive/2008/10/31/3191767.aspx

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

谷歌瀏覽器提示此標籤頁的內容正在被分享怎麼辦? 谷歌瀏覽器提示此標籤頁的內容正在被分享怎麼辦? Mar 13, 2024 pm 05:00 PM

  Google瀏覽器提示此標籤頁的內容正在被分享怎麼辦?我們在使用Google瀏覽器開啟新標籤的時候有時會遇到提示此標籤頁的內容正在被分享,那麼這是怎麼回事?以下就讓本站來為使用者來仔細的介紹一下谷歌瀏覽器提示此標籤頁的內容正在被共享的問題解析吧。  Google瀏覽器提示此標籤頁的內容正在被共享解決方法  1、打開谷歌瀏覽器,在瀏覽器右上角可以看到三個點「自訂和控制Googlechrome」用滑鼠點擊圖示進行圖示。  2、點擊後,Google瀏覽器的選單視窗將彈出到下面,滑鼠將移動到「更多工具

alt+=是什麼快速鍵 alt+=是什麼快速鍵 Mar 10, 2023 am 11:40 AM

alt+=是快速求和的快速鍵,使用「alt+=」快速鍵的方法是:1、開啟Excel表格檔案;2、建立數字資料;3、用滑鼠選取需要求和資料;4、按「alt+= ”鍵,即可對所選資料進行求和。

試試新的鈴聲和文字提示音:在 iOS 17 的 iPhone 上體驗最新的聲音提醒功能 試試新的鈴聲和文字提示音:在 iOS 17 的 iPhone 上體驗最新的聲音提醒功能 Oct 12, 2023 pm 11:41 PM

在iOS17中,Apple徹底改變了其全部鈴聲和文字音調選擇,提供了20多種可用於電話、簡訊、鬧鐘等的新聲音。以下是查看它們的方法。與舊鈴聲相比,許多新鈴聲的長度更長,聽起來更現代。它們包括琶音、破碎、樹冠、小木屋、啁啾、黎明、出發、多洛普、旅程、水壺、水星、銀河系、四邊形、徑向、清道夫、幼苗、庇護所、灑水、台階、故事時間、戲弄、傾斜、展開和山谷。反射仍然是預設鈴聲選項。還有10多種新的文字提示音可用於傳入簡訊、語音郵件、傳入郵件警報、提醒警報等。要存取新的鈴聲和文字鈴聲,首先,請確保您的iPh

Vue中如何處理使用者輸入的校驗和提示 Vue中如何處理使用者輸入的校驗和提示 Oct 15, 2023 am 10:10 AM

Vue中如何處理使用者輸入的校驗和提示在Vue中處理使用者輸入的校驗和提示,是前端開發中常見的一個需求。本文將介紹一些常用的技巧和具體的程式碼範例,幫助開發者更好地處理使用者輸入的校驗和提示。使用計算屬性進行校驗在Vue中,可以使用計算屬性來監控和校驗使用者輸入。可以定義一個計算屬性來代表使用者輸入的值,並在該計算屬性中進行校驗邏輯。下面是一個範例:data(){

百度貼吧app提示操作太頻繁怎麼回事 百度貼吧app提示操作太頻繁怎麼回事 Apr 01, 2024 pm 05:06 PM

百度貼吧app提示操作過於頻繁這種提示通常是為了維護平台的正常運作和用戶體驗,以防止惡意刷屏、廣告刷帖等不當行為,具體的處理方法各位可以看小編分享教程哦。百度貼吧app提示操作過於頻繁處理方法分享1、當系統提示【操作太頻繁】的時候,我們需要等待一段時間,如果著急可以先去做一點別的事情,一般等待一會兒之後,這個提示信息就會自動消失,這時候我們就可以正常使用了。 2.如果等了很久之後,它還是顯示【操作過於頻繁】,我們可以嘗試去貼吧應急吧、貼吧意見反饋吧等官方貼吧,發帖反饋這種現象,請求官方人員解決。 3、

title是什麼意思 title是什麼意思 Aug 04, 2023 am 11:18 AM

title是定義網頁標題的意思,位於標籤內,並且是在瀏覽器的標題欄中顯示的文本,title對於網頁的搜尋引擎優化和用戶體驗都非​​常重要。在編寫HTML網頁時,應該注意使用相關的關鍵字和吸引人的描述來定義title元素,以便吸引更多的使用者點擊和瀏覽。

提示顯示器驅動程式已停止回應並且已恢復怎麼辦? 提示顯示器驅動程式已停止回應並且已恢復怎麼辦? Mar 14, 2024 pm 02:00 PM

  在玩遊戲的時候,突然彈出」顯示器驅動程式已停止響應並且已恢復」的提示,這是怎麼回事?顯示器驅動程式已停止回應並且已恢復是指系統中的顯示器驅動程式出現了異常情況,無法正常工作,導致顯示器出現無法回應或黑屏等異常情況。  常見的原因:  1、顯示器驅動錯誤:驅動程式中可能存在程式的邏輯錯誤,或是資料傳輸錯誤等問題,導致驅動程式無法正常運作。  2、硬體配置不足:電腦硬體的配置不足,無法滿足高效能應用的要求,導致系統出現停頓、卡頓等問題。  3、系統檔案損壞:電腦系統檔案的損壞

HTML中title的意思是什麼 HTML中title的意思是什麼 Mar 06, 2024 am 09:53 AM

HTML中的title顯示的是網頁標題標籤,可以讓瀏覽者知道目前頁面的主要是說什麼的,所以每個網頁都應該有一個單獨的title。

See all articles