亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 擴展 > jQuery > 正文

突發奇想的一個jquery插件

2024-09-06 20:04:34
字體:
來源:轉載
供稿:網友

一。基本介紹
這個jq插件主要是使用canvas來畫出這個tip的外表,而且這個tip能夠自動調整大小,由于是用canvas畫的,而不是圖片,所以調整之后也不會變模糊之類的。
主要思想是用一個P標簽來裝載title的值,然后把他放在一個大小根據這個P來改變的canvas里面,難點是定位。
話說貌似我們一開始不指定font-size的時候,火狐可以查找出一個默認的font-size值,而谷歌瀏覽器卻讀不出值,這個較為郁悶。
詳細說明請參考代碼注釋。
二。演示以及代碼
復制代碼 代碼如下:
(function($){
$.fn.polaTip=function(){
var tips={};//tip集合,對每一個匹配集里面的元素建立一個對象,該對象保存一些需要的信息
//下面的這個tip和上面的沒啥關系,保存的是一個canvas對象,并且這個canvas是共享的
var tip= $("<canvas style=' position:absolute;top:0px;left:0; z-index:50001; width:100px;height:100px;font-family:Verdana'></canvas>") //text-align:center;vertical-align:maddle;
var div=$("<div style='position:absolute;z-index=50000'>").append(tip);
div.appendTo("body");
var cxt = tip[0].getContext("2d");
this.each(function(){
var $that=$(this);
var offset= $that.offset();
var setleft=offset.left;//取得相對于頁面的位置
var settop=offset.top;
var theTip={};
var title= $("<p id='title' style=' margin:0;text-align:center;z-index:50002; font-size:16px;vertical-align:maddle;position:absolute; '></p>");
theTip.title=title;//title是每一個元素都有一個的,把他們保存在tips數組里面
var fontSize=16;
//var fontSize=parseInt(theTip.title.css("fontSize"));
title.css("opacity",0);//先默認隱藏這個要裝載元素的title屬性的P
div.append(theTip.title);
titleString=$that.attr("title");//取得title屬性
var titleStringLength=titleString.length;//取得title的長度
$that.attr("title","");
title.text(titleString);//那元素title的值保存到剛剛創建的P里面
theTip.titleWidth= title.width();//裝載后的P的寬度
theTip.that=$that;
if(this.id) {tips[this.id]=theTip;}
else{$that.addClass(Math.random()+"");tips[$that.attr("class")]=theTip;}//如果有ID就用ID做key,沒有的話就生成隨機的class作為key
if(theTip.titleWidth>250||titleStringLength>(250/fontSize)){//如果這個title過長,那么就進行換行
var rowLength=Math.sqrt(titleStringLength*(5/1))*fontSize;
toBreakWord( (rowLength*1.3)/fontSize,theTip.title[0]);
theTip.title.css("width",rowLength);
}
else{theTip.title.css({"width":titleStringLength*fontSize+10});}//,whiteSpace:"nowrap"
$that.hover(
function(){
var theTip=null;
if(this.id){theTip=tips[this.id];}
else{theTip=tips[this.className];}//根據key取得自己在tips里面的對象
var title=theTip.title;
/*寬高計算*/
var height=title.height()*1.1+20;
var width=title.width()*1.1+20;
title.css({top:title.height()*0.1*0.5+10+"px",left:width*0.1+2+"px"});
tip.css({height:height+"px",width:width+"px"});
var lingrad = cxt.createLinearGradient(0,0,0,150); //canvas的線性漸變
lingrad.addColorStop(0, '#00ABEB');
lingrad.addColorStop(0.5, 'rgba(10, 150, 255, 0.9)');
cxt.strokeStyle=lingrad;
var radgrad = cxt.createRadialGradient(150,75,10,150,75,150); //canvas的反射性漸變
radgrad.addColorStop(0, 'rgba(10, 150, 255, 0.3)');
radgrad.addColorStop(0.5, 'rgba(10, 150, 255, 0.3)');
radgrad.addColorStop(1, 'rgba(256,256,256,0.5)');
cxt.lineJoin="round";//兩線形成夾角時候的夾角形狀
cxt.lineWidth=2;//線寬
cxt.clearRect(0,0,300,150);//清空canvas,因為canvas是共享的,必須清空上一次的東西
/*畫我想要的tip形狀*/
cxt.beginPath();
cxt.moveTo(30.5,5.5);
cxt.lineTo(285.5,5.5);
cxt.lineTo(285.5,135.5);
cxt.lineTo(75.5,135.5);
cxt.lineTo(2.5,148.5);
cxt.lineTo(30.5,125.5);
cxt.lineTo(30.5,5.5);
cxt.stroke();
/*填充*/
cxt.fillStyle="#fff";
cxt.fill();
cxt.fillStyle=radgrad ;
cxt.fill();
for(var flagtip in tips)//讓其他tip的文字隱藏
{ flagtip=tips[flagtip];
if(flagtip==theTip){flagtip.title.css("opacity",1);}
else{
if(flagtip.title.css){flagtip.title.css("opacity",0);}
}
}
div.css({left:setleft+$that.width()+"px",top:settop-2*tip.height()+"px",opacity:0,height:height,width:width});
div.stop();
div.animate({top:settop-tip.height()+"px",opacity:1},500)
},
function(){
div.stop();
div.animate({top:settop-2*tip.height()+"px",opacity:0},1000)
})//hover
})//each
}
})(jQuery)
$(function(){
$("div p").children().add("#Button1").polaTip();
})

某斷詞換行函數
復制代碼 代碼如下:
function toBreakWord(intLen, obj)//斷詞換行的函數
{
var strContent=obj.innerHTML;
var strTemp="";
while(strContent.length>intLen){
strTemp+=strContent.substr(0,intLen)+"<br>";
strContent=strContent.substr(intLen,strContent.length);
}
strTemp+= strContent;
obj.innerHTML=strTemp;
}

完整的演示代碼:
復制代碼 代碼如下:
<!DOCTYPE html >
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<style type="text/css">

.newStyle1
{
background-color: #C0C0C0;
border: 1px solid #00FFFF;
position: absolute;
top: 308px;
left: 17px;
}

</style>
<script type="text/javascript" src="http://img.jb51.net/jslib/jquery/jquery.js" > </script>
<script type="text/javascript">
function toBreakWord(intLen, obj)//斷詞換行的函數
{
var strContent=obj.innerHTML;
var strTemp="";
while(strContent.length>intLen){
strTemp+=strContent.substr(0,intLen)+"<br>";
strContent=strContent.substr(intLen,strContent.length);
}
strTemp+= strContent;
obj.innerHTML=strTemp;
}
</script>


<script type="text/javascript" >
(function($){
$.fn.polaTip=function(){

var tips={};//tip
var tip= $("<canvas style=' position:absolute;top:0px;left:0; z-index:50001; width:100px;height:100px;font-family:Verdana'></canvas>") //text-align:center;vertical-align:maddle;
var div=$("<div style='position:absolute;z-index=50000'>").append(tip);
div.appendTo("body");
var cxt = tip[0].getContext("2d");
this.each(function(){
var $that=$(this);
var offset= $that.offset();
var setleft=offset.left;
var settop=offset.top;
var theTip={};
var title= $("<p id='title' style=' margin:0;text-align:center;z-index:50002; font-size:16px;vertical-align:maddle;position:absolute; '></p>");
theTip.title=title;

var fontSize=16;
//var fontSize=parseInt(theTip.title.css("fontSize"));
title.css("opacity",0);
div.append(theTip.title);

titleString=$that.attr("title");
var titleStringLength=titleString.length;
$that.attr("title","");
theTip.title.text(titleString);
theTip.titleWidth= theTip.title.width();
theTip.that=$that;
if(this.id) {tips[this.id]=theTip;}
else{$that.addClass(Math.random()+"");tips[$that.attr("class")]=theTip;}
if(theTip.titleWidth>250||titleStringLength>(250/fontSize)){
var rowLength=Math.sqrt(titleStringLength*(5/1))*fontSize;
toBreakWord( (rowLength*1.3)/fontSize,theTip.title[0]);
theTip.title.css("width",rowLength);
}
else{theTip.title.css({"width":titleStringLength*fontSize+10});}//,whiteSpace:"nowrap"


$that.hover(
function(){
var theTip=null;
if(this.id){theTip=tips[this.id];}
else{theTip=tips[this.className];}
var title=theTip.title;
var height=title.height()*1.1+20;
var width=title.width()*1.1+20;

title.css({top:title.height()*0.1*0.5+10+"px",left:width*0.1+2+"px"});

tip.css({height:height+"px",width:width+"px"});

var lingrad = cxt.createLinearGradient(0,0,0,150);
lingrad.addColorStop(0, '#00ABEB');
lingrad.addColorStop(0.5, 'rgba(10, 150, 255, 0.9)');
cxt.strokeStyle=lingrad;
var radgrad = cxt.createRadialGradient(150,75,10,150,75,150);
radgrad.addColorStop(0, 'rgba(10, 150, 255, 0.3)');
radgrad.addColorStop(0.5, 'rgba(10, 150, 255, 0.3)');
radgrad.addColorStop(1, 'rgba(256,256,256,0.5)');
cxt.fillStyle=radgrad ;
cxt.lineJoin="round";
cxt.lineWidth=2;
cxt.clearRect(0,0,300,150);
cxt.beginPath();
cxt.moveTo(30.5,5.5);
cxt.lineTo(285.5,5.5);
cxt.lineTo(285.5,135.5);
cxt.lineTo(75.5,135.5);
cxt.lineTo(2.5,148.5);
cxt.lineTo(30.5,125.5);
cxt.lineTo(30.5,5.5);
cxt.stroke();

cxt.fillStyle="#fff";
cxt.fill();
cxt.fillStyle=radgrad ;
cxt.fill();
for(var flagtip in tips)
{ flagtip=tips[flagtip];
if(flagtip==theTip){flagtip.title.css("opacity",1);}
else{
if(flagtip.title.css){flagtip.title.css("opacity",0);}
}
}
div.css({left:setleft+$that.width()+"px",top:settop-2*tip.height()+"px",opacity:0,height:height,width:width});
div.stop();
div.animate({top:settop-tip.height()+"px",opacity:1},500)
},
function(){
div.stop();
div.animate({top:settop-2*tip.height()+"px",opacity:0},1000)
})//hover
})//each
}
})(jQuery)


$(function(){
$("div p").children().add("#Button1").polaTip();
})
</script>
</head>
<body>
<div style="border: thin solid #00FFFF; background-color: #CCFFCC; width: 800px; font-family: 'Comic Sans MS';">
<h2 style="background-color: #33CCFF; color: #FFFFFF; border: thin solid #C0C0C0; padding: 3px">Pola的實驗室</h2>
<ul>
<li>作為實驗,"W3C","麻省理工學院","萬維網","HTML","CSS","XML",和那個詭異的按鈕都是有tip的,內容保存在title里</li>
<li>添加功能的語句:$("div p").children().add("#Button1").polaTip();</li>
<li>此插件只能運行于支持canvas標簽的瀏覽器上</li>
<li>注:沒用excanvas.js來支持IE下的canvas是因為這個文件太大,單單用來畫提示框就太浪費了</li>
</ul>
</div>
<div class="newStyle1"> <p style="width: 654px; height: 112px">W3C是英文 World Wide Web Consortium 的縮寫,中文意思是<abbr title="World Wide Web Consortium"> W3C</abbr>理事會或萬維網聯盟。W3C于1994年10月在<a href="#" title="麻省理工學院(Massachusetts Institute of Technology,縮寫:MIT)是美國一所綜合性私立大學"> 麻省理工學院</a> 計算機科學實驗室成立。創建者是<abbr title="World Wide Web"> 萬維網</abbr> 的發明者Tim Berners-Lee。 W3C組織是對網絡標準制定的一個非贏利組織,像<abbr title="HyperText Mark-up Language"> HTML</abbr> 、XHTML 、<abbr title="Cascading Style Sheet"> CSS</abbr> 、<abbr title="Extensible Markup Language"> XML</abbr> 的標準就是由W3C來定制。W3C會員(大約500名會員)包括生產技術產品及服務的廠商、內容供應商、團體用戶、研究實驗室、標準制定機構和政府部門,一起協同工作,致力在萬維網發展方向上達成共識。</p>
<input id="Button1" type="button" value="按鈕" onclick="alert('開玩笑的~')" title="點擊我你就杯具啦" /></div>
</body>
</html>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久噜噜噜久噜久久| 国产成人97精品免费看片| 国产精品va在线播放我和闺蜜| 成人看片人aa| 日韩电影免费在线观看中文字幕| 亚洲人成欧美中文字幕| 国产日韩在线亚洲字幕中文| 国产精品狼人色视频一区| 中文字幕久热精品视频在线| 国产亚洲欧美视频| 欧美日韩国产专区| 热re99久久精品国产66热| 亚洲跨种族黑人xxx| 最近2019免费中文字幕视频三| 国产91免费看片| 亚洲视频欧洲视频| 亚洲国产精彩中文乱码av在线播放| 久久久成人的性感天堂| 日韩av一区在线观看| 精品一区二区三区四区在线| 久久国产精品视频| 热久久视久久精品18亚洲精品| 亚洲欧美国产日韩中文字幕| 国产成人精品综合| 中文字幕欧美日韩va免费视频| 91欧美激情另类亚洲| 久久精品99久久香蕉国产色戒| 日本成人黄色片| 久久久www成人免费精品| 国产精品免费看久久久香蕉| 久久91精品国产91久久久| 亚洲国内精品在线| 国产成人精品网站| 亚洲午夜激情免费视频| 国产亚洲欧美一区| 亚洲欧美在线一区| 亚洲欧洲日产国码av系列天堂| 欧美午夜片欧美片在线观看| 亚洲国产精久久久久久久| 亚洲跨种族黑人xxx| 日韩在线欧美在线| 欧美成人高清视频| 午夜精品三级视频福利| 68精品国产免费久久久久久婷婷| 欧美日韩国内自拍| 国产在线精品自拍| 欧美性色19p| 富二代精品短视频| 国产亚洲欧美视频| 欧美日本国产在线| 亚洲最大激情中文字幕| 成人信息集中地欧美| 亚洲自拍另类欧美丝袜| 精品色蜜蜜精品视频在线观看| 久久香蕉国产线看观看av| 韩国日本不卡在线| 亚洲国产91精品在线观看| 色综合久久悠悠| 日韩精品在线免费播放| 成人亚洲欧美一区二区三区| 91久久精品国产91久久性色| 国产成人jvid在线播放| 57pao精品| 国产精品高潮呻吟久久av无限| 国产精品一区二区在线| 国产久一一精品| 97久久久免费福利网址| 亚洲午夜国产成人av电影男同| 亚洲欧美日本伦理| 亚洲一区二区三区在线视频| 日韩精品免费看| 日本高清不卡的在线| 国产精品亚洲视频在线观看| 亚洲人成免费电影| 成人久久久久久久| 日韩精品中文字| 亚洲人成电影网站色xx| 日韩福利视频在线观看| 国产精品99久久99久久久二8| 日韩中文字幕在线观看| 国产精品91在线观看| 亲子乱一区二区三区电影| 一道本无吗dⅴd在线播放一区| 亚洲福利精品在线| 亚洲欧洲成视频免费观看| 日韩在线中文字幕| 川上优av一区二区线观看| 日本久久精品视频| 久久久久久久av| 欧美午夜丰满在线18影院| 欧美成在线观看| 精品久久久久久中文字幕| 成人国产精品色哟哟| 久久免费国产视频| 欧美精品免费在线| 亚洲男女自偷自拍图片另类| 欧美日韩免费观看中文| 超薄丝袜一区二区| 欧美性一区二区三区| 亚洲三级黄色在线观看| 欧美又大又粗又长| 最近2019好看的中文字幕免费| 日韩av男人的天堂| 欧美日韩亚洲一区二区| 国产精品伦子伦免费视频| 亚洲欧美另类中文字幕| zzjj国产精品一区二区| 亚洲第一网中文字幕| 国产精品久久久久久久久久免费| 日韩av综合网| www国产亚洲精品久久网站| 久久精品美女视频网站| 久久精品视频在线播放| 九九热精品视频| 91精品国产91久久久久久久久| 成人写真福利网| 欧美尤物巨大精品爽| 97久久精品人人澡人人爽缅北| 亚洲激情 国产| 久久久免费在线观看| 日韩精品欧美激情| 伊人av综合网| 91香蕉国产在线观看| 91精品视频在线看| 国产亚洲精品美女| 欧美大尺度电影在线观看| 日韩在线免费视频观看| 欧美激情精品久久久久久黑人| 日本国产高清不卡| 久久久999国产精品| 亚洲自拍偷拍视频| 日本欧美中文字幕| 日韩中文在线中文网在线观看| 精品视频一区在线视频| 狠狠色狠狠色综合日日小说| 欧美日韩免费观看中文| 精品久久久久久久久久久久久久| 精品性高朝久久久久久久| 9.1国产丝袜在线观看| 国产99久久精品一区二区 夜夜躁日日躁| www.99久久热国产日韩欧美.com| 91最新国产视频| 国产精品久久久91| 日本乱人伦a精品| 日韩激情视频在线播放| 欧美激情手机在线视频| 欧美香蕉大胸在线视频观看| 欧美激情网友自拍| 久久伊人精品天天| 亚洲第一av在线| 国产美女高潮久久白浆| 国产男女猛烈无遮挡91| 色吧影院999| 欧美壮男野外gaytube| 日韩在线视频国产| 久久久久久久一区二区| 欧美性jizz18性欧美| 欧美亚洲国产日本| 91po在线观看91精品国产性色| 一本一本久久a久久精品牛牛影视| 91精品视频一区| 国产成人+综合亚洲+天堂| 精品无码久久久久久国产| 国产精品福利在线|