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

首頁 > 網站 > WEB開發 > 正文

jQuery實戰6:優雅的彈窗效果

2024-04-27 15:12:04
字體:
來源:轉載
供稿:網友

彈窗是網頁中經??吹降男Ч?,以前的彈窗是用window.open()等方式在瀏覽器窗口新建另一個新窗口來完成的,這種彈窗方式現在已經被很多瀏覽器所攔截。今天我們來用更加友好的方式來實現彈窗效果。完成的功能效果如圖:

這里寫圖片描述

如圖,在瀏覽器的左上方是兩個button按鈕,按下之后分別彈出左下角的窗口和中間的窗口,右下角的窗口當頁面加載完成之后自動慢慢顯示,之后又徐徐的淡出。基于div+CSS的模式,我們的先來建立html頁面。

window.html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>jQuery實戰:窗口效果</title><link type="text/css" rel="stylesheet" href="../css/window.css" /><script type="text/javascript" src="../js/jquery-1.7.2.min.js"></script><script type="text/Javascript" src="../js/window.js"></script></head><body> <input type="button" value="左下角顯示窗口" id="leftpop" /> <input type="button" value="屏幕中間顯示窗口" id="centerpop" /> <div class="window" id="left"> <div class="title"> <img alt="關閉" src="../image/close.gif" /> 我是左邊顯示窗口的標題欄 </div> <div class="content"> 我是左邊顯示窗口的內容區 </div> </div> <div class="window" id="center"> <div class="title"> <img alt="關閉" src="../image/close.gif" /> 我是中間顯示窗口的標題欄 </div> <div class="content"> <p>我是中間顯示窗口的內容區</p> </div> </div> <div class="window" id="right"> <div class="title"> <img alt="關閉" src="../image/close.gif" /> 我是右邊顯示窗口的標題欄 </div> <div class="content"> 我是右邊顯示窗口的內容區 </div> </div></body></html>

從html代碼中可以看到,這里的窗口是用div來實現的,目前的html代碼只是描繪了頁面的基本骨架,能夠效果離窗口效果還相差甚遠,不過別急,添加上css代碼,頁面相對就好看多了。

window.css

.window { background-color: #D0DEF0; width: 250px; /*padding: 2px;*/ margin: 5px; /*控制窗口絕對定位*/ position: absolute; display: none;}.content { height: 150px; background-color: white; border: 2px solid #D0DEF0; padding: 2px; /*控制區域內容超過指定高度和寬度時顯示滾動條*/ overflow: auto;}.title { padding: 4px; font-size: 14px;}.title img { width: 14px; height: 14px; float: right; cursor: pointer;}

為了看到當前效果,先將.window的display屬性注釋掉,或者將它的屬性值改為”block”,看到的效果如圖: 這里寫圖片描述

其實三個窗口是由三個div組成,每個div分為title和content兩部分,title是標題欄區域,content是內容區域。為了達到窗口的視覺效果,給我們的title標題欄區域加背景顏色background-color,然后給我們的content內容區域加邊框border: 2px solid #D0DEF0;,邊框的顏色與標題欄一致。此時的效果如上圖,目前只能看到一個窗口的原因是三個div占據了相同的位置,第三個窗口遮蓋住了前兩個窗口。不過沒關系,我們可以用JavaScript代碼來控制三個div的位置。

jQuery庫函數提供了豐富多彩的插件功能,今天我們來編寫自己的插件,簡單的案例如下:

$.fn.hello = function() { alert("hello:" + this.val()); return this;}

只需要在需要的地方注冊上本插件就行了。相應的,這里我們編寫的插件mywin來專門處理我們的窗口功能效果。 window.js

/*** 窗口位置的插件*/$.fn.mywin = function() { var windowobj = $(window); var browserWidth = $(window).width(); var browserHeight = $(window).height(); var scrollLeft = $(window).scrollLeft(); var scrollTop = $(window).scrollTop(); var cwinwidth = this.width(); var cwinheight = this.height(); var left = scrollLeft + (browserWidth - cwinwidth)/2; var top = cwinheight + (browserHeight - cwinheight)/2; this.css("left", left).css("top", top); $(this.children(".title").children("img")).click(function() { $(this).parent().parent().hide("slow"); }); return this;}

上訴代碼編寫了本應用中中間窗口案例的插件,調用代碼如下:

window.js

$(document).ready(function() { $("#centerpop").click(function() { $("#center").mywin().show("slow"); });});

插件中的代碼思路是:為了計算窗口div的left和top屬性值,我們需要拿到瀏覽器窗口的長browserWidth和寬browserHeight,以及窗口是否因為內容過多而又滾動條的位置scrollLeft和scrollTop。窗口div的left值=滾動條橫坐標+(瀏覽器窗口的橫向長度-窗口div橫向長度)/2,top值=滾動條縱坐標+(瀏覽器窗口的縱向長度-窗口div縱向長度)/2。

最終完成完整的jQuery代碼如下:

$(document).ready(function(){ var centerwin = $("#center"); var leftwin = $("#left"); var rightwin = $("#right"); $("#centerpop").click(function(){ //鼠標點擊按鈕之后,把id為center的窗口顯示在頁面中間 //計算位于屏幕中間的窗口的左邊界和上邊界的值 //瀏覽器可視區域的寬和高,當前窗口的寬和高 //需要考慮到橫向滾動條的當前左邊界值以及縱向滾動條的當前上邊界值 centerwin.show("slow"); }); $("#leftpop").click(function() { leftwin.slideDown("slow"); }); setTimeout(function () { centerwin.mywin({left: "center", top: "center"}); leftwin.mywin({left: "left", top: "bottom"}, function(){ leftwin.slideUp("slow"); }); var windowobj = $(window); var cwinwidth = rightwin.outerWidth(true); var cwinheight = rightwin.outerHeight(true); var browserwidth = windowobj.width(); var browserheight = windowobj.height(); var scrollLeft = windowobj.scrollLeft(); var scrollTop = windowobj.scrollTop(); var rleft = scrollLeft + browserwidth - cwinwidth; if ($.browser.safari) { rleft = rleft - 15; } if ($.browser.Opera) { rleft = rleft + 15; } if ($.browser.msie && $.browser.version.indexOf("8") >= 0) { rleft = rleft - 20; } rightwin.mywin({left: "right", top: "bottom"}, function() { rightwin.hide(); },{left: rleft, top: scrollTop + browserheight}).fadeOut(15000).dequeue(); },500);});/** *@param position表示窗口的最終位置,包含兩個屬性,一個是left,一個是top *@param hidefunc表示執行窗口隱藏的方法 *@param initPos表示窗口初始位置,包含兩個屬性,一個是left,一個是top */$.fn.mywin = function(position, hidefunc, initPos) { if (position && position instanceof Object) { var positionleft = position.left; var positiontop = position.top; var left; var top; var windowobj = $(window); var currentwin = this; var cwinwidth; var cwinheight; var browserwidth; var browserheight; var scrollLeft; var scrollTop; //計算瀏覽器當前可視區域的寬和高,以及滾動條左邊界,上邊界的值 function getBrowserDim() { browserwidth = windowobj.width(); browserheight = windowobj.height(); scrollLeft = windowobj.scrollLeft(); scrollTop = windowobj.scrollTop(); } //計算窗口真實的左邊界值 function calLeft(positionleft, scrollLeft, browserwidth, cwinwidth) { if (positionleft && typeof positionleft == "string") { if (positionleft == "center") { left = scrollLeft + (browserwidth - cwinwidth) / 2; } else if (positionleft == "left") { left = scrollLeft; } else if (positionleft == "right") { left = scrollLeft + browserwidth - cwinwidth; if ($.browser.safari) { left = left - 15; } if ($.browser.opera) { left = left + 15; } if ($.browser.msie && $.browser.version.indexOf("8") >= 0) { left = left - 20; } } else { left = scrollLeft + (browserwidth - cwinwidth) / 2; } } else if (positionleft && typeof positionleft == "number") { left = positionleft; } else { left = 0; } } //計算窗口真實的上邊界值 function calTop(positiontop, scrollTop, browserheight, cwinheight) { if (positiontop && typeof positiontop == "string") { if (positiontop == "center") { top = scrollTop + (browserheight - cwinheight) / 2; } else if (positiontop == "top") { top = scrollTop; } else if (positiontop == "bottom") { top = scrollTop + browserheight - cwinheight; if ($.browser.opera) { top = top - 25; } } else { top = scrollTop + (browserheight - cwinheight) / 2; } } else if (positiontop && typeof positiontop == "number") { top = positiontop; } else { top = 0; } } //移動窗口的位置 function moveWin() { calLeft(currentwin.data("positionleft"), scrollLeft, browserwidth, cwinwidth); calTop(currentwin.data("positiontop"), scrollTop, browserheight, cwinheight); currentwin.animate({ left: left, top: top },600); } //定義關閉按鈕的動作 currentwin.children(".title").children("img").click(function() { if (!hidefunc) { currentwin.hide("slow") ; } else { hidefunc(); } }); if (initPos && initPos instanceof Object) { var initLeft = initPos.left; var initTop = initPos.top; if (initLeft && typeof initLeft == "number") { currentwin.css("left", initLeft); } else { currentwin.css("left", 0); } if (initTop && typeof initTop == "number") { currentwin.css("top", initTop); } else { currentwin.css("top", 0); } currentwin.show(); } cwinwidth = currentwin.outerWidth(true); cwinheight = currentwin.outerHeight(true); currentwin.data("positionleft", positionleft); currentwin.data("positiontop", positiontop); getBrowserDim(); moveWin(); var scrollTimeout; //瀏覽器滾動條滾動時,移動窗口的位置 $(window).scroll(function(){ //判斷一下當前窗口是否可見 if (!currentwin.is(":visible")) { return; } clearTimeout(scrollTimeout); scrollTimeout = setTimeout(function(){ getBrowserDim(); moveWin(); },300); }); //瀏覽器大小改變時,移動窗口的位置 $(window).resize(function(){ //判斷一下當前窗口是否可見 if (!currentwin.is(":visible")) { return; } getBrowserDim(); moveWin(); }); //返回當前對象,以便可以級聯的執行其他方法 return currentwin; }}

左下角和中間窗口的div是靠觸發click事件來顯示窗口,在滾動條滾動時觸發scroll事件來重新調用計算div的top和left的函數。右下角的窗口是徐徐升起的窗口,所以在文檔加載完成的時候就顯示窗口,處理的代碼是放在setTimeout()事件里面,setTimeout函數里面的fadeOut讓窗口達到漸變透明的效果。

案例代碼托管地址:https://github.com/shizongger/JqueryInAction


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合精品伊人久久| 91欧美视频网站| 在线播放精品一区二区三区| 亚洲午夜未满十八勿入免费观看全集| 国产精品久久久久77777| 国产成人精品免费视频| 免费不卡在线观看av| 国产成人综合一区二区三区| 日韩在线国产精品| 视频一区视频二区国产精品| 国产精品99久久久久久久久| 国产日韩欧美黄色| 久久视频国产精品免费视频在线| 国产精品久久久久久久久久小说| 久久精品色欧美aⅴ一区二区| 国内偷自视频区视频综合| 欧美日韩一区二区免费视频| 欧美专区日韩视频| 91精品久久久久久综合乱菊| 色久欧美在线视频观看| 亚洲视频视频在线| 91产国在线观看动作片喷水| 国产精品青草久久久久福利99| 国产精品你懂得| 国产成人鲁鲁免费视频a| 精品福利在线视频| 亚洲综合在线播放| 亚洲电影免费观看高清完整版在线观看| 亚洲日本欧美日韩高观看| 国产精品一区久久| 亚洲精品久久在线| 亚洲va国产va天堂va久久| 亚洲一区av在线播放| 久久777国产线看观看精品| 欧美精品手机在线| 美女精品视频一区| 欧美日在线观看| 亚洲国产小视频在线观看| 国产精品丝袜久久久久久不卡| 日韩黄色高清视频| 欧美韩国理论所午夜片917电影| 国产精品高清在线| 日韩av一区二区在线观看| 亚洲日本成人女熟在线观看| 久久久久久亚洲| 日韩中文字幕精品视频| 免费97视频在线精品国自产拍| 欧美在线一级va免费观看| 国产精品男人爽免费视频1| 久久精品国产电影| 欧美中文字幕视频在线观看| 欧美猛交ⅹxxx乱大交视频| 欧美激情亚洲国产| 日日摸夜夜添一区| 亚洲女人天堂网| 国产精品视频一| 久久久久久久久久国产| 国产欧美日韩免费看aⅴ视频| 亚洲一区二区日本| 国产精品久久色| 色伦专区97中文字幕| 91精品国产91久久久久久| 欧美亚洲另类在线| 热久久免费视频精品| 7777免费精品视频| 欧美俄罗斯性视频| 国产欧美日韩精品在线观看| 国产精品av电影| 麻豆成人在线看| 欧美成年人视频| 国产69精品久久久久9999| 日本老师69xxx| 国产日韩精品在线| 国产精品无码专区在线观看| 午夜精品一区二区三区在线视频| 91久久精品日日躁夜夜躁国产| 日韩在线观看视频免费| 久久久久久亚洲精品不卡| 人九九综合九九宗合| 日韩精品在线免费播放| 中文字幕亚洲综合久久筱田步美| 久久91亚洲人成电影网站| 国产精品久久久久久婷婷天堂| 91久久久国产精品| 精品国产电影一区| 午夜精品久久久久久久99热| 欧美日韩国产区| 欧美激情精品久久久久久免费印度| 色樱桃影院亚洲精品影院| 国产99视频在线观看| 欧美日韩999| 亚洲成人网在线观看| 亚洲欧美中文字幕在线一区| 国产亚洲精品91在线| 亚洲精品视频在线播放| 在线色欧美三级视频| 国产丝袜高跟一区| 日本久久精品视频| 欧美电影免费观看| 国产经典一区二区| 久久久精品国产网站| 57pao成人永久免费视频| 国产精品美腿一区在线看| 日韩专区中文字幕| 日日骚久久av| 九九热视频这里只有精品| 麻豆乱码国产一区二区三区| 欧美中文在线字幕| 久久亚洲一区二区三区四区五区高| 色妞久久福利网| 亚洲激情电影中文字幕| 国产美女主播一区| 欧美激情a∨在线视频播放| 日韩中文视频免费在线观看| 国产精品网红福利| 亚洲一区二区久久久久久| 爱福利视频一区| 日韩女在线观看| 久久99视频精品| 精品人伦一区二区三区蜜桃免费| 久久亚洲春色中文字幕| 国产成人aa精品一区在线播放| 久久久久久久久久久人体| 高清在线视频日韩欧美| 精品久久久久久久大神国产| 精品久久在线播放| 亚洲国内精品视频| 欧美日韩国产一区二区三区| 成人免费淫片视频软件| 日韩电影中文字幕一区| 亚洲乱码一区av黑人高潮| 国产亚洲精品一区二555| 中文字幕在线看视频国产欧美在线看完整| 亚洲香蕉成人av网站在线观看| 亚洲综合日韩中文字幕v在线| 欧美高清不卡在线| 国产成人高潮免费观看精品| 国产成人综合av| 美女少妇精品视频| 亚洲精品美女在线观看播放| 久久久噜噜噜久久久| 亚洲欧美激情一区| 欧美精品videos另类日本| 96pao国产成视频永久免费| 精品综合久久久久久97| 欧美激情网友自拍| 91极品视频在线| 欧美视频二区36p| 国产精品久久久久国产a级| 欧美最近摘花xxxx摘花| 亚洲美女性生活视频| 久久人人爽人人| 欧美刺激性大交免费视频| 成人午夜一级二级三级| 国产精品人人做人人爽| 美女视频黄免费的亚洲男人天堂| 欧美中文字幕在线| yw.139尤物在线精品视频| 欧美激情手机在线视频| 欧美有码在线观看| 国产伦精品一区二区三区精品视频| 欧美另类极品videosbestfree| 欧美日韩爱爱视频| 久久av中文字幕|