滿橫屏(full-x-width)是常常見到的效果。所謂滿橫屏,即指不管是在多大的顯示屏上,圖片都將佔滿整行。javascript
實際上,滿橫屏效果是很容易實現的,咱們只需用一個塊級元素包裹住img元素,而後將img的width值設置爲100%便可。css
所以,咱們這裏將討論圖片滿屏(full-client),即圖片在整個頁面窗口所有顯示。滿屏至關於滿橫屏(full-x-width)和滿高屏(full-y-height)的結合。html
這裏你們想一下,若是要實現不管多大的屏幕,或多小的屏幕,圖片都佔滿整個顯示窗口,則必然圖片會進行縮小或放大。既然要縮放,就必須得考慮一個問題:同比例縮放。顯然,圖片是不容許被拉伸的,一旦拉伸則會產生變形。所以,圖片滿屏顯示首先要明確的是,圖片必定要縮放,圖片比例必定不能改變。java
如何實現圖片比例不變呢?使用img元素能夠實現嗎?動畫
使用img元素很難實現各個屏幕下同比例縮放。url
你們想一下,除非顯示窗口的尺寸比例正好和圖片寬高比例相同,圖片進行放大縮小時,才能同比例佔滿整個屏幕。spa
假設圖片大小是800*600,顯示窗口尺寸是1300*800,則圖片是不能同比例正好覆蓋顯示窗口的。若是將圖片同比放大到最小能覆蓋顯示窗口的尺寸,而後讓圖片居中顯示,超出窗口部分截掉,卻是能夠。但顯然,使用img元素肯定放大比例,而後居中等操做是很麻煩的。code
因此,咱們這裏使用背景圖來實現滿屏顯示。orm
注意:通常狀況下,咱們既可使用img展現圖片,也能夠經過背景圖展現。但滿橫屏這種狀況,咱們建議使用背景圖展現圖片,方便。htm
background有不少設置能夠方便地解決咱們剛纔提出的問題,好比,剛好放大到最小能覆蓋顯示窗口的尺寸,能夠經過background-size:cover來實現;圖片居中能夠經過background-position:center來實現。
<body> <div class="img img1"> </div> <div class="img img2"> </div> <div class="img img3"> </div> <div class="img img4"> </div> </body>
每個div都是用來放置背景圖的,一個有4個背景圖。因爲除了展現具體的圖片不一樣,其他都相同,因此設置了img類,又爲每個圖片單獨設一個類。
*{ margin:0; padding:0; } html,body,.img{ height:100%; } html,body{ overflow:hidden; } .img{ background-size:cover; background-position:center center; } .img1{ background-image:url("圖片的地址"); } .img2{ background-image:url("圖片的地址"); } .img3{ background-image:url("圖片的地址"); } .img4{ background-image:url("圖片的地址"); }
這裏有幾點須要注意的:
第一,咱們給html,body, .img都設置了height爲100%。由於背景圖不佔空間,因此當咱們在div中只設置了背景圖時,div的高度是0。這樣的話就沒法顯示背景圖片了。所以,咱們須要給.img的div元素設置高度爲100%,即佔滿整個顯示窗口的高度。但因爲該100%是以.img的父元素body的高度計算的,而body元素的高度也是0,所以也須要給body設置高度100%,同理html也須要設置。
第二,設置overflow:hidden。設置完咱們就只能看到一張圖片了,但好處是顯示頁面徹底是圖片,而沒有滾動軸。這就是滿屏圖片效果。下面咱們能夠經過js實現查看剩餘圖片。
咱們經過JS來查看剩餘未顯示的圖片,經過點擊頁面查看下一張圖片。這裏,圖片動畫部分用到CSS3的transition和transform屬性。
首先想一下實現原理,當點擊頁面時,4幅圖都應該向上移動一個顯示窗口的高度,再次點擊時,再次上移一個高度。因爲4幅圖是一塊兒移動的,所以咱們須要給4幅圖包裹一個父div,只須要移動父div,4幅圖就一塊兒移動了。
<body> <div id="wrap"> <div class="img img1"> </div> <div class="img img2"> </div> <div class="img img3"> </div> <div class="img img4"> </div> </div> </body>
因爲#wrap能夠移動,因此咱們必須將其設置成絕對或相對定位。這裏固然是選擇相對定位,同時,爲了讓其移動產生動畫效果,咱們添加transition屬性。
#wrap{ height:100%; position:relative; transition:all ease-in-out 500ms; }
在寫JS程序前,咱們先理一下代碼邏輯:
點擊第一下時,圖片向上移動 顯示窗口高度*1
點擊第二下時,圖片向上移動 顯示窗口高度*2
點擊第三下時,圖片向上移動 顯示窗口高度*3
點擊第四下時,圖片向上移動 顯示窗口高度*0
由於咱們只有4幅圖,所以最多隻能點擊三下,就必須將其拉回到原始位置。不失通常性,加入咱們有n張圖,則咱們最多隻能點擊n-1次,第n次點擊時就須要回到原處了。
所以,爲了程序的拓展性,咱們在寫代碼時,不能只對4張圖拿來寫,之後‘4’這個數字徹底可能改變,咱們不能每次改變都去改代碼,這樣靈活性就太差了。
邏輯:首先獲取有幾張圖片記爲num,且獲取顯示窗口的高度。設置一個變量a,默認值爲1,每次點擊咱們都判斷,若變量a大於等於num,說明已是最後一張圖了。則令num爲0。而後用顯示窗口高度乘以變量a做爲移動距離,移動後令a加1,做爲下次移動距離。
<script> var a = $('body').css('height');//獲取顯示窗口高度 var num = null;//圖片數量 $('.img').each(function(){ num++;//有幾個.img,num就加幾回 }) var num2 = 1;//須要乘的係數,後面變成1,2,3... $('body').click(function(){ if(num2>=num)//說明是最後一張圖片了 num2 = 0; $("#wrap").css('transform','translateY('+(-a*num2)+')px'); num2++; }) </script>
其中,改變transform的值時,用了字符串鏈接,只有中間的具體數字是計算的,其餘都是字符串,注意別忘加px,不然是顯示不出來的。
好了,就這麼多了,謝謝你們。