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

首頁 > 開發 > JS > 正文

JS教程:lightbox源碼解析

2024-09-06 12:40:59
字體:
來源:轉載
供稿:網友

lightbox源碼解析

function getpagescroll(){

var yscroll;

if (self.pageyoffset) {
yscroll = self.pageyoffset; //ns
} else if (document.documentelement && document.documentelement.scrolltop){ // explorer 6 strict
yscroll = document.documentelement.scrolltop;
} else if (document.body) {// all other explorers
yscroll = document.body.scrolltop;
}

arraypagescroll = new array('',yscroll)
return arraypagescroll;
}

1. self
打開任何一個網頁,瀏覽器會首先創建一個窗口,這個窗口就是一 個window 對象,也是 js 運行所依附的全局環境對象和全局作用域對象。
self 指窗口本身,它返回的對象 跟window 對象是一模一樣的。也正因為如此,window 對象的常用方法和函數都可以用 self 代替 window。

2. 獲得窗口的滾動偏移量
* omniweb 4.2-, netfront 3.3- 下無法獲得.
* safari 和 omniweb 4.5+ 有 bug,但無影響.

有三種方法獲取滾動條的位置。
1. window.pagexoffset/pageyoffset 大多數瀏覽器,非??煽?br />2. document.documentelement.scrollleft/top strict 模式下的 ie6 和其它很少一些瀏覽器
3. document.body.scrollleft/top ie6 和 其它一些瀏覽器

瀏覽器在支持 document.body 或者 document.documentelement 的情況下,如果提供了 scrollleft/top,那么除了 safari 和 omniweb 4.5+ 外, 這些值都是
很可靠的。在 safari and omniweb 4.5+ 中,當滾動條偏移量為 0 時,會返回 -8,其它情況下正常。當然了,因為它們提供了正確的 window.pagexoffset/pageyoffset,
這個 bug 不會造成什么影響。

function getpagesize(){

//整個頁面的大小
var xscroll, yscroll;

if (window.innerheight && window.scrollmaxy) {
xscroll = document.body.scrollwidth;
yscroll = window.innerheight + window.scrollmaxy;
} else if (document.body.scrollheight > document.body.offsetheight){ // all but explorer mac
xscroll = document.body.scrollwidth;
yscroll = document.body.scrollheight;
} else { // explorer mac...would also work in explorer 6 strict, mozilla and safari
xscroll = document.body.offsetwidth;
yscroll = document.body.offsetheight;
}

//可見窗口(view port)的大小
var windowwidth, windowheight;
if (self.innerheight) { // all except explorer
windowwidth = self.innerwidth;
windowheight = self.innerheight;
} else if (document.documentelement && document.documentelement.clientheight) { // explorer 6 strict mode
windowwidth = document.documentelement.clientwidth;
windowheight = document.documentelement.clientheight;
} else if (document.body) { // other explorers
windowwidth = document.body.clientwidth;
windowheight = document.body.clientheight;
}

// for small pages with total height less then height of the viewport
if(yscroll < windowheight){
pageheight = windowheight;
} else {
pageheight = yscroll;
}

// for small pages with total width less then width of the viewport
if(xscroll < windowwidth){
pagewidth = windowwidth;
} else {
pagewidth = xscroll;
}


arraypagesize = new array(pagewidth,pageheight,windowwidth,windowheight)
return arraypagesize;
}

文檔加載完之前是無法獲取窗口大小值的,而且還要對不同瀏覽器使用不同的方法。可用參數如下:
1. window.innerheight/width ie 除外的大多數瀏覽器
2. document.body.clientheight/width 包括 ie 在內的大多數瀏覽器
3. document.documentelement.clientheight/width 包括 ie 在內的大多 dom 瀏覽器

關于 clientheight/width 會有點亂,因為在不同瀏覽器下,甚至在同一個瀏覽器下 clientheight/width 都可能不同,要看文檔類型激發的是瀏覽器的
strict 模式還是 quirks 模式。有時,它們指的是窗口的尺寸,有時是文檔內容的尺寸。下表展示了不同瀏覽器、不同模式中的屬性:

properties and what they relate to
browser window.
innerheight
document.
body.
clientheight
document.
documentelement.
clientheight
opera 9.5+ strict window document window
opera 9.5+ quirks window window document
opera 7-9.2 window window document
opera 6 window window n/a
mozilla strict window document window
mozilla quirks window window document
khtml window document document
safari window document document
icab 3 window document document
icab 2 window window n/a
ie 6+ strict n/a document window
ie 5-7 quirks n/a window 0
ie 4 n/a window n/a
icebrowser window window document
tkhtml hv3 window window document
netscape 4 window n/a n/a

如上所示,好歹還是有個值是確定的:innerheight,不過 ie 卻不支持這個屬性。目前,幾乎所有的瀏覽器都支持使用 window.innerheight/width 屬性。

算法邏輯:
1. 如果存在 window.innerheight/width 屬性, 是可以完全信賴的, 使用 window.innerheight/width 就可以了.
2. 否則如果存在 document.documentelement.clientheight/width 屬性且值大于 0,就用 document.documentelement.clientheight/width.
3. 否則就用 document.body.clientheight/width.

此算法在 ie6+ “standards compliant mode” 下,當窗口所謂 0px × 0px 大小時,失效。

|||

function showlightbox(objlink)
{
// prep objects
var objoverlay = document.getelementbyid('overlay');
// overlay 為遮罩層
var objlightbox = document.getelementbyid('lightbox');
var objcaption = document.getelementbyid('lightboxcaption');
var objimage = document.getelementbyid('lightboximage');
var objloadingimage = document.getelementbyid('loadingimage');
// 加載圖片
var objlightboxdetails = document.getelementbyid('lightboxdetails');


var arraypagesize = getpagesize();
var arraypagescroll = getpagescroll();

// center loadingimage if it exists
if (objloadingimage) {
// arraypagesize = new array(pagewidth,pageheight,windowwidth,windowheight)
objloadingimage.style.top = (arraypagescroll[1] + ((arraypagesize[3] - 35 - objloadingimage.height) / 2) + 'px');
// top = 滾動條位置 + [視口高度 - 35px(瀏覽器狀態欄高度) - 加載圖片的高度]/2
objloadingimage.style.left = (((arraypagesize[0] - 20 - objloadingimage.width) / 2) + 'px');
objloadingimage.style.display = 'block';
// 設置加載圖片在頁面中間,瀏覽器狀態欄高度約為 35px,滾動條欄寬度約為 20px。
}

// set height of overlay to take up whole page and show
// 設置遮罩層高度
objoverlay.style.height = (arraypagesize[1] + 'px');
objoverlay.style.display = 'block';

// preload image
imgpreload = new image();

imgpreload.onload=function(){
objimage.src = objlink.href;

// center lightbox and make sure that the top and left values are not negative
// and the image placed outside the viewport
var lightboxtop = arraypagescroll[1] + ((arraypagesize[3] - 35 - imgpreload.height) / 2);
var lightboxleft = ((arraypagesize[0] - 20 - imgpreload.width) / 2);

objlightbox.style.top = (lightboxtop < 0) ? "0px" : lightboxtop + "px";
objlightbox.style.left = (lightboxleft < 0) ? "0px" : lightboxleft + "px";


objlightboxdetails.style.width = imgpreload.width + 'px';

if(objlink.getattribute('title')){
objcaption.style.display = 'block';
objcaption.innerhtml = objlink.getattribute('title');
} else {
objcaption.style.display = 'none';
}

// a small pause between the image loading and displaying is required with ie,
// this prevents the previous image displaying for a short burst causing flicker.
if (navigator.appversion.indexof("msie")!=-1){
pause(250);
}

if (objloadingimage) { objloadingimage.style.display = 'none'; }
// 隱藏加載圖

// hide select boxes as they will 'peek' through the image in ie
selects = document.getelementsbytagname("select");
for (i = 0; i != selects.length; i++) {
selects[i].style.visibility = "hidden";
}


objlightbox.style.display = 'block';

// after image is loaded, update the overlay height as the new image might have
// increased the overall page height.
arraypagesize = getpagesize();
objoverlay.style.height = (arraypagesize[1] + 'px');

// check for 'x' keypress
listenkey();

return false;
}

imgpreload.src = objlink.href;

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久女教师免费一区| 91精品国产91久久久久久| 欧美高跟鞋交xxxxxhd| 国产欧美日韩精品丝袜高跟鞋| 亚洲色图17p| 欧美精品久久久久久久免费观看| 2018中文字幕一区二区三区| 影音先锋欧美精品| 2019中文在线观看| 91系列在线观看| 亚洲视频视频在线| 欧美日韩亚洲精品内裤| 午夜精品福利在线观看| 国产91在线播放九色快色| 久久成人免费视频| 97av在线视频免费播放| 欧美亚洲视频在线观看| 在线观看国产精品淫| 亚洲精品国产美女| 日韩美女写真福利在线观看| 97碰碰碰免费色视频| 日韩亚洲欧美中文高清在线| 久久久精品视频成人| 亚洲一二三在线| 日韩国产精品亚洲а∨天堂免| 国产自摸综合网| 91久久久久久久久久久| 亚洲区在线播放| 国产一区二区三区三区在线观看| 欧美日在线观看| 精品国产一区二区三区久久久狼| 九九久久久久久久久激情| 国产又爽又黄的激情精品视频| 亚洲香蕉伊综合在人在线视看| 日韩欧美aⅴ综合网站发布| 欧美电影电视剧在线观看| 亚洲欧洲成视频免费观看| 4388成人网| 日韩精品在线影院| 97在线视频一区| 亚洲人永久免费| 宅男66日本亚洲欧美视频| 2021久久精品国产99国产精品| 最近2019中文字幕mv免费看| 啪一啪鲁一鲁2019在线视频| 成人国产精品色哟哟| 日韩美女免费视频| 国产成人精品视频| 亚洲午夜久久久久久久| 精品国产精品自拍| 一区二区av在线| 亚洲日本中文字幕免费在线不卡| 国产日韩欧美在线| 亚洲少妇中文在线| 中文字幕亚洲激情| 亚洲福利视频在线| 久久精品91久久久久久再现| 亚洲a∨日韩av高清在线观看| 日本精品中文字幕| 欧美日韩国产精品专区| 欧美日韩国产精品| 久久精品视频网站| 九九九久久久久久| 国产成人精品免费久久久久| 亚洲一区二区福利| 亚洲女人天堂av| 亚洲成年人影院在线| 久久成人人人人精品欧| 精品中文字幕在线观看| 欧美自拍视频在线| 国产精品大片wwwwww| 欧美日韩中文字幕在线视频| 国产区亚洲区欧美区| 欧美激情亚洲激情| 日韩成人在线视频网站| 国产精品欧美亚洲777777| 久久成人av网站| 国产精品www网站| 亚洲人成网站777色婷婷| 欧美一区二区影院| 777国产偷窥盗摄精品视频| 精品偷拍一区二区三区在线看| 国内精品400部情侣激情| 国产一区二区三区四区福利| 欧美日韩一区二区免费在线观看| 亚洲欧美日韩国产精品| 成人性生交大片免费观看嘿嘿视频| 欧美一区二区三区……| 精品久久香蕉国产线看观看亚洲| 亚洲xxxx18| 久久影院免费观看| 日本精品久久中文字幕佐佐木| 久久久精品在线| 亚洲欧美三级伦理| …久久精品99久久香蕉国产| 97超视频免费观看| 国产一区二区三区在线视频| 日韩av日韩在线观看| 国产精品高潮呻吟久久av黑人| 亚洲国产91精品在线观看| 日韩精品在线看| 成人免费xxxxx在线观看| 国产精品免费久久久久久| 色综合久综合久久综合久鬼88| 亚洲国产欧美自拍| 国产婷婷成人久久av免费高清| 国产一区欧美二区三区| 国产精品你懂得| 精品国产欧美成人夜夜嗨| 欧美午夜丰满在线18影院| 91精品国产综合久久久久久久久| 欧美日韩亚洲视频| xxxx欧美18另类的高清| 黄色精品一区二区| 亚洲欧美中文日韩在线v日本| 日韩资源在线观看| 久久精品国产成人精品| 亚洲精品久久久久| 国产啪精品视频网站| 欧美精品在线视频观看| 亚洲第一页自拍| 日韩av一区二区在线| 亚洲国产成人精品久久| 久久精品91久久久久久再现| 97在线精品国自产拍中文| 国产精品久久中文| 欧美重口另类videos人妖| 亚洲精品久久久久国产| 亚洲免费一级电影| 久久成人人人人精品欧| 亚洲天堂一区二区三区| 日本成熟性欧美| 国产美女久久精品| 日本一区二区不卡| 欧美亚洲成人精品| 亚洲国产精品成人av| 欧美精品xxx| 中文字幕日韩欧美精品在线观看| 一本色道久久88综合日韩精品| 欧美黑人视频一区| 91精品国产777在线观看| 在线观看国产精品日韩av| 久久久久久久久久国产精品| 国产精品久久久久久久久久久久久久| 欧美第一黄网免费网站| 国产日韩中文字幕在线| 国产精品入口尤物| 日韩av在线资源| 一本一本久久a久久精品综合小说| 欧美最近摘花xxxx摘花| 精品久久久久久亚洲国产300| 欧美精品videofree1080p| 欧美激情欧美激情| 亚洲人成在线观看网站高清| 亚洲欧美在线播放| 亚洲理论片在线观看| 亚洲综合在线小说| 久久精品国产清自在天天线| 亚洲老板91色精品久久| 精品视频—区二区三区免费| 琪琪亚洲精品午夜在线| 国外成人免费在线播放| 奇米四色中文综合久久| 国产美女被下药99|