掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
隨著扁平化的流行,我們的網(wǎng)頁往往變得更加簡單和清晰,但雖然簡單,在就在技術(shù)上和對開發(fā)者的要求上并沒有變得簡單,反而是變得更加搞的要求;因為整體簡單了,就不能讓其中有任何瑕疵,讓一切都得看上去是精致的。而今天這個解決方案也是基于這樣一種需求而來的,雖然標(biāo)題上是用jQuery來做,實際上原生的JS也能做到;當(dāng)然用JS的這個框架可能開發(fā)效率會更高一點,于是我們下面就以jQuery為例子吧。
那今天這個需求其實非常常見,那就是做一些寬屏全屏幻燈片首頁首屏的時候,往往可能上面有一個導(dǎo)航條,而下面就是我們希望鋪滿全屏的幻燈片。這時候我們就不能夠使用固定的尺寸了,因為不同的電腦終端屏幕的分辨率不同,就算是同一臺電腦不同的瀏覽器有效窗口大小也不一樣。
如果用CSS來做,你可能在其中遇到一些問題或者感覺似乎不是那么靠譜。而如果使用最基礎(chǔ)的JS方式,比如獲取窗口大小減去頂部區(qū)域的高度從而等到幻燈盒子及幻燈圖片的高度,這樣其實也會存在一個問題,那就是當(dāng)用戶開始的瀏覽器是縮放狀態(tài)的時候,然后他沒有刷新網(wǎng)頁就讓瀏覽器恢復(fù)到全部尺寸,這樣我們的幻燈片的高度還是原來的那樣,這種體驗顯然不夠好。
因此我們需要的是能夠像CSS控制尺寸一樣動態(tài)地改變元素的大小,也就是我們標(biāo)題中所說的實現(xiàn)HTML元素隨著瀏覽器窗口大小變化而動態(tài)變化,有點兒類似CSS3的響應(yīng)式。如果你對JS的事件比較熟悉,那可能就會想到resize()事件了。
resize()事件或者說方法是干嘛的,其實看字面上的意思我們就待該知道這是跟重定義(re)大?。╯ize)相關(guān)的,官方給它的定義就是:當(dāng)調(diào)整瀏覽器窗口的大小時,發(fā)生 resize 事件。 resize() 方法觸發(fā) resize 事件,或規(guī)定當(dāng)發(fā)生 resize 事件時運行的函數(shù)?;菊Z法如下:
$(selector).resize(function) //參數(shù):function,可選;規(guī)定當(dāng)發(fā)生 resize 事件時運行的函數(shù)。
于是我們可以編寫如下jQuery代碼:
$(function(){ var $wind = $(window); //加載窗口 var $indexBox = $('.index-banner .slideBox'); //加載幻燈片盒子 var $indexImg = $('.index-banner .bd img'); //加載幻燈片img元素 var winH= $wind.outerHeight();//窗口高度 var winW= $wind.outerWidth();//窗口寬度 var headerH= $('#header').outerHeight();//導(dǎo)航高度 var hdh=Math.abs(winH-headerH); $indexBox.width(winW); $indexBox.height(hdh); $indexImg.height(hdh); //resize事件處理 $wind.resize(function(){ var newW = $wind.outerWidth(); var newH = $wind.outerHeight(); var newHdh=Math.abs(newH-headerH); $indexBox.width(newW); $indexBox.height(newHdh); $indexImg.height(newHdh); }) })
以上的十多行代碼就實現(xiàn)我們我所需要的需求,當(dāng)然實際應(yīng)用比上面的可能更為復(fù)雜,比如說除了導(dǎo)航高度需要減去外,還可能有一個最上面的管理工具欄(比如wordpress默認(rèn)狀態(tài))等等,有了這個模型我們可以根據(jù)應(yīng)用而舉一反三即可。
我們在微信上24小時期待你的聲音
解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流