web自定義彈出框

原文鏈接:設計製作一個自己的個性化彈出提示窗


做前端的一般都知道,儘量減少使用alert,主要因爲系統的彈出框會終止當前一切進程,甚至連窗口操作也被禁止,實在是不太友好,所以這次講下如何定製一個你自己的彈出提示框。即:使用html+css製作一個提示框,並使用javascript爲它添加常用方法來達到替換系統提示框的目的。

因爲時間有限(太忙了,養家餬口的男人你傷不起啊~),我打算分3篇:1、設計製作一個自己的彈出提示框;2、爲你的彈出提示框添加交互功能;3、拖拽你的彈出提示框。

在此之前先讓我們看下各瀏覽器的alert效果:
<!--more-->
3c3c0aa5-6a17-3585-9de3-e7366bee2ed2.png

Chrome下當同一個頁面多次alert的時候,會提示可以禁止此頁面再次彈出提示框,Opera直接就提示可以禁止腳本繼續運行,firefox4 將簡潔進行到底,自我感覺Chrome 在這點上應該向人家學習,ie還是老樣子,大家都熟悉了。

我們來分解下提示框的組成部分,我畫了個圖(懶人有懶法):

a0e57a28-dcac-395d-ab35-730026f77156.png

分析下這個結構,它必須有個默認寬度,不能撐的整屏全糊住,高度應該由其中的內容來決定,一開始出現是在屏幕居中,並要有個半透明的遮罩以凸(好邪惡的字 :c5 )顯出它的存在,而且點擊標題不鬆手還可以移動,考慮下,如何用html代碼來構架。

先聲明:我只是講下如何製作的一個思路,至於具體的製作,你不需要全部照我的來,我的設計並不出衆(好吧,我承認很爛!摔! :e7 )。下面這個就是我的設計:

17545311-253b-379a-b430-11f9f798683f.png

現在你應該已經構思出了一個提示框的html代碼,很簡單的,如下:

Html代碼 收藏代碼
  1. <divid="hbg"></div><!-- 半透明背景遮罩 -->

  2. <divid="alertM"><!-- 提示框的容器 -->

  3. <h5id="alertT">提示</h5><!-- 標題 -->

  4. <aid="alertR"title="關閉"href="void(0)"< /span>>&times;</a><!-- 關閉按鈕 -->

  5. <pid="alertP">測試</p><!-- 內容 -->

  6. <divid="alertBtns"><!-- 按鈕區域 -->

  7. <aid="alertY"title="確認"href="void(0)"< /span>>確認</a><!-- 確認和取消按鈕 -->

  8. <aid="alertN"title="取消"href="void(0)"< /span>>取消</a>

  9. </div>

  10. </div>



我們來寫下css,注意到裏面的每個元素都有個id嗎,主要是爲了減少其被你的其他樣式所覆蓋的緣故,叫這幾個id的應該不多吧,先進行初始化,減少不兼容:
Css代碼 收藏代碼
  1. #alertM,#alertT,#alertR,#alertP,#alertBtns{

  2. margin:0;

  3. padding:0;

  4. font-size:14px;

  5. line-height:24px;

  6. font-family:arial,sans-serif;

  7. text-align:left

  8. }

  9. #alertR,#alertBtns a{

  10. text-decoration:none;

  11. }



然後是半透明背景,注意背景的高度和透明度,這裏是以後要由js來控制的,而容器之所以絕對定位,主要是爲了以後定位方便並添加拖拽功能:
Css代碼 收藏代碼
  1. #hbg{

  2. width:100%;

  3. position:absolute;

  4. background:#000;

  5. z-index:998;/* 設置層級,主要是爲了遮住頁面內的其他內容 */

  6. top:0;

  7. left:0;

  8. height:2000px;/* 隨便填,超過整屏高度就行,後面由js控制 */

  9. opacity:0.6/* ie8及以下瀏覽器看不到效果,我也懶的給你寫filter,換其他的現代瀏覽器吧 */

  10. }

  11. #alertM{

  12. position:absolute;/* 絕對定位,爲了以後控制方便 */

  13. top:200px;

  14. background:#fff;

  15. z-index:999;/* 層級,當然要比背景高1啦,要不你怎麼看見 */

  16. width:400px;

  17. height:auto;

  18. left:600px;/* 隨便填,後面由js控制 */

  19. border:1px #ccc solid

  20. }



標題欄和內容,非常簡單的:
Css代碼 收藏代碼
  1. #alertT{

  2. margin:4px;

  3. padding:0 16px;

  4. background:#0398e1;

  5. color:#fff;

  6. border:1px #16a8fc solid;

  7. }

  8. #alertP{

  9. padding:12px;

  10. }



關閉按鈕,右浮動,並使用負值margin 調高:
Css代碼 收藏代碼
  1. #alertR{

  2. font-size:24px;

  3. float:right;/* 右浮動 */

  4. margin:-32px 8px 00;/* 使用負值margin 調高 */

  5. padding:4px;

  6. color:#72d5fb;

  7. font-weight:bold;

  8. }

  9. #alertR:hover{

  10. color:#fff;

  11. }



底部按鈕區域,也是非常簡單的:
Css代碼 收藏代碼
  1. #alertBtns{

  2. text-align:right;

  3. }

  4. #alertBtns a{

  5. margin:8px;

  6. padding:0 24px;

  7. color:#000;

  8. background: #EEE;

  9. border: 1px #E6E6E6 solid;

  10. display: inline-block;

  11. }

  12. #alertBtns a:hover{

  13. background: #ccc;

  14. border: 1px #ddd solid;

  15. }

  16. #alertBtns a:active{

  17. background: #bbb;

  18. border: 1px #aaa solid;

  19. }



完成啦,怎麼樣,什麼效果,是不是有種微妙的坑爹感覺 :e1 ?是不是如下圖一樣:

29d61b12-29a2-3011-8074-286569a8984b.png

彆着急,還沒完,還得繼續添加下css3效果,如果你用的是ie(神馬360,qq,搜狐全都是ie內核)並且版本不高於8的話就沒必要繼續了,下面的代碼對你來說是另一個世界的存在。

非ie黨們,我們繼續,先調整下容器和標題:
Css代碼 收藏代碼
  1. #alertM{

  2. box-shadow:0px 0px 24px #000;/* 陰影 */

  3. border-radius:12px;/* 圓角 */

  4. }

  5. #alertT{

  6. text-shadow:0px 1px 1px #000;/* 文字陰影 */

  7. background-p_w_picpath:-moz-linear-gradient(top, #03b3f6, #0374c6);/* 火狐下的漸變 */

  8. background-p_w_picpath:-webkit-gradient(linear,left top, left bottom, color-stop(0, #03b3f6),color-stop(1, #0374c6));/* webkit內核下的漸變 */

  9. border-radius:8px;

  10. box-shadow:0px 1px 2px rgba(0,0,0,0.8);

  11. }



然後是確認和取消按鈕,跟上面差不多:
Css代碼 收藏代碼
  1. #alertBtns a{

  2. text-shadow: 0px 1px 1px white;

  3. background-p_w_picpath: -moz-linear-gradient(top, #fff, #ccc);

  4. background-p_w_picpath: -webkit-gradient(linear,left top, left bottom, color-stop(0, #fff),color-stop(1, #ccc));

  5. border-radius: 4px;

  6. box-shadow: 0px 0px 2px rgba(0,0,0,0.8);

  7. }

  8. #alertBtns a:hover{

  9. background: #ccc;

  10. background-p_w_picpath: -moz-linear-gradient(top, #f6f6f6,#c6c6c6);

  11. background-p_w_picpath: -webkit-gradient(linear,left top, left bottom, color-stop(0, #f6f6f6),color-stop(1, #c6c6c6));

  12. box-shadow: 0px 0px 3px rgba(0,0,0,1);

  13. border: 1px #ddd solid;

  14. }

  15. #alertBtns a:active{

  16. background: #bbb;

  17. background-p_w_picpath: -moz-linear-gradient(top, #f3f3f3,#bbb);

  18. background-p_w_picpath: -webkit-gradient(linear,left top, left bottom, color-stop(0, #f3f3f3),color-stop(1, #bbb));

  19. box-shadow: 0px 0px 2px rgba(0,0,0,0.6);

  20. border: 1px #aaa solid;

  21. }



最後是關閉按鈕,我要弄點有趣的,給它添加個旋轉動畫:
Css代碼 收藏代碼
  1. #alertR{

  2. text-shadow:0px 1px 1px #000;

  3. -webkit-transform: rotate(-360deg);/* 一開始時候先設定旋轉-360度,這樣鼠標懸浮的時候轉的圈數多一些 */

  4. -moz-transform: rotate(-360deg);

  5. -o-transform: rotate(-360deg);

  6. transform: rotate(-360deg);

  7. -webkit-transition: -webkit-transform 0.6s ease-out;/* 設定動畫部分,時間以及效果 */

  8. -moz-transition: -moz-transform 0.6s ease-out;

  9. -o-transition: -o-transform 0.6s ease-out;

  10. transition: transform 0.6s ease-out;

  11. }

  12. #alertR:hover{

  13. color:#fff;

  14. -webkit-transform: rotate(360deg);/* 就是在0.6s 內從-360度轉到360度的意思 */

  15. -moz-transform: rotate(360deg);

  16. -o-transform: rotate(360deg);

  17. transform: rotate(360deg);

  18. }

  19. #alertR:active{

  20. text-shadow:0px 0px 1px #000;

  21. }



呼,恭喜你,第一部分達成,建議你修改下css,弄些自己的漸變,多練練。當然,假如你實在是不想這麼折騰的話,可以直接查看:Demo

下期講解使用jquery給你的提示框添加互動效果,輸入一些參數就可以控制顯示時間,關閉方法,確認方法,真正替代系統的默認提示框。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章