修改彈窗Style

来源:http://www.cnblogs.com/White-destiny/archive/2016/05/28/5536679.html
-Advertisement-
Play Games

只能自定一個彈窗樣式 首先必須明白的一點是,alert只是一個方法,而這個方法內部是native code,這是我們無法修改的部分,而最終暴露的只有這個alert方法名字而已,你甚至拿不到alert的屬性,因此要真正意義上的做到修改alert樣式是不可行的。 有了以上這個條件基礎,我們能做的只有重寫 ...


只能自定一個彈窗樣式

首先必須明白的一點是,alert只是一個方法,而這個方法內部是native code,這是我們無法修改的部分,而最終暴露的只有這個alert方法名字而已,你甚至拿不到alert的屬性,因此要真正意義上的做到修改alert樣式是不可行的。

有了以上這個條件基礎,我們能做的只有重寫alert方法,替換掉系統自帶的alert方法。

 

一行代碼替換alert方法

  1. window.alert = function {};

看到這,就有很多人已經明瞭了,首先你可以先寫好一個假的彈窗樣式,然後通過這種方式顯示出來,這種是html css js 三方同時更改達到效果,你也可以全部都JavaScript去完成結構樣式的操作,今天我們的示例就是全部通過js來完成結構樣式控制。

明確了基本方式是通過替換alert方法,那麼就開始進一步的思考實現步驟。

 

實現自定義alert方法的步驟

確定彈窗樣式HTML結構 —— 結構插入 —— 樣式控制 —— 點擊確定刪除結構

 

確定結構

  1. <div>

  2. <p>alert內容</p>

  3. <div>確定</div>

  4. </div>

 

使用JS處理結構

於是有了下麵這段代碼:

  1. window.alert = alert;

  2. function alert(data) {

  3. var a = document.createElement("div"),//創建最外圍標簽

  4. p = document.createElement("p"),//創建顯示內容的p標簽

  5. btn = document.createElement("div"),//創建按鈕標簽

  6. textNode = document.createTextNode(data),//創建一個文位元組點

  7. btnText = document.createTextNode("確定");//創建文位元組點

  8. // 內部結構套入

  9. p.appendChild(textNode);//將需要顯示的內容節點插入p標簽內

  10. btn.appendChild(btnText);//將按鈕文字插入按鈕標簽

  11. a.appendChild(p);//將p標簽插入外圍div

  12. a.appendChild(btn);//將按鈕插入外圍div

  13. // 整體顯示到頁面內

  14. document.getElementsByTagName("body")[0].appendChild(a);

  15. }

這 里為什麼不直接用window.alert = function {};方法呢,這裡考慮預編譯時並不會對window.alert進行賦值,如果用這種方式寫的話,在window.alert = function {} 之前調用alert還會是系統自帶alert。

當你初步調用alert時,如果不傳參數會報錯,那麼我們需要一個data的判 斷,textNode = document.createTextNode(data)就可改成textNode = document.createTextNode(data ? data : "")

 

優化當前的JS代碼

接下來我們會發現,我們還缺少樣式和確定關閉功能。這裡完全可以用DOM0級事件綁定。代碼很快變成了這樣:

  1. window.alert = alert;

  2. function alert(data) {

  3. var a = document.createElement("div"),

  4. p = document.createElement("p"),

  5. btn = document.createElement("div"),

  6. textNode = document.createTextNode(data ? data : ""),

  7. btnText = document.createTextNode("確定");

  8. // 內部結構套入

  9. p.appendChild(textNode);

  10. btn.appendChild(btnText);

  11. a.appendChild(p);

  12. a.appendChild(btn);

  13. // 整體顯示到頁面內

  14. document.getElementsByTagName("body")[0].appendChild(a);

  15. // 確定綁定點擊事件刪除標簽

  16. btn.onclick = function {

  17. a.parentNode.removeChild(a);

  18. }

  19. }

 

樣式控制

還剩下最後一個樣式控制問題。為了寫起來更美觀更方便,我們需要寫一個方法來控制樣式。

  1. function css(targetObj, cssObj) {

  2. for(var i in cssObj) {

  3. targetObj.style[i] = cssObj[i];

  4. }

  5. }

這樣我們就可以通過如下方式控制樣式:

  1. css(target, {

  2. “background-color” : “red”,

  3. “text-align” : “center”,

  4. })

 

wait wait,還沒完

測試後發現,如上的這種樣式書寫方式,IE8下麵有渲染問題,那我們換成cssText。所以,樣式控制代碼改為——>

  1. function css(targetObj, cssObj) {

  2. var str = targetObj.getAttribute("style") ? targetObj.getAttribute("style") : "";

  3. for(var i in cssObj) {

  4. str += i + ":" + cssObj[i] + ";";

  5. }

  6. targetObj.style.cssText = str;

  7. }

這樣咱就解決IE8的尷尬了,但是同時也帶來了其他問題,字元串拼接,有可能會出現重覆屬性,因此如果你需要做一個通用的,還需要對字元串進行查重,但對於本例來說完全夠用了。

 

完成版的alert功能

我們的demo就成了這樣(樣式還是自己調吧,下麵的樣式只是做個示範):

  1. <!DOCTYPE html>

  2. <html>

  3. <head>

  4. <meta charset="UTF-8">

  5. <title>HTML5學堂 - alert</title>

  6. </head>

  7. <body>

  8. <script>

  9. window.alert = alert;

  10. function alert(data) {

  11. var a = document.createElement("div"),

  12. p = document.createElement("p"),

  13. btn = document.createElement("div"),

  14. textNode = document.createTextNode(data ? data : ""),

  15. btnText = document.createTextNode("確定");

  16. // 控制樣式

  17. css(a, {

  18. "position" : "fixed",

  19. "left" : "0",

  20. "right" : "0",

  21. "top" : "20%",

  22. "width" : "100px",

  23. "margin" : "0 auto",

  24. "background-color" : "#f00",

  25. "font-size" : "20px",

  26. "text-align" : "center"

  27. });

  28. css(btn, {

  29. "background" : "blue",

  30. })

  31. // 內部結構套入

  32. p.appendChild(textNode);

  33. btn.appendChild(btnText);

  34. a.appendChild(p);

  35. a.appendChild(btn);

  36. // 整體顯示到頁面內

  37. document.getElementsByTagName("body")[0].appendChild(a);

  38. // 確定綁定點擊事件刪除標簽

  39. btn.onclick = function {

  40. a.parentNode.removeChild(a);

  41. }

  42. }

  43. function css(targetObj, cssObj) {

  44. var str = targetObj.getAttribute("style") ? targetObj.getAttribute("style") : "";

  45. for(var i in cssObj) {

  46. str += i + ":" + cssObj[i] + ";";

  47. }

  48. targetObj.style.cssText = str;

  49. }

  50. alert(123);

  51. </script>

  52. </body>

  53. </html>

最 後總結下,本例運用到的知識點,DOM操作、預編譯期與執行、for-in迴圈,cssText。本文的主要目的在於引導思路,無論做什麼項目,思路很重 要,要懂得變通,如果你想通過某些屬性去修改alert樣式,那你想破頭都想不出,所有效果實現方法都不是唯一的,僅僅只是需要一個你想要的alert樣 式,完全可以“造假”,合理利用“造假”的方法,可以使你的效果寫起來比別人輕鬆很多。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <!--[if !supportLists]-->1、<!--[endif]-->下載與引用 <!--[if !supportLists]-->a) <!--[endif]-->首先需要下載一個oracle clinent 12c 發行版(我這邊下載的是發行版)併進行安裝,下載內容如下圖 B) 創建 ...
  • 升級文檔: "Migrating from DNX to .NET Core" "Migrating from ASP.NET 5 RC1 to ASP.NET Core 1.0 RC2" "Migrating your Entity Framework Code from RC1 to RC2" ...
  • View視圖界面 請求的控制器方法 部分視圖方法 這樣的做法讓多個界面可以共用,例如: 1、點擊分類展示相關產品數據 2、點擊品牌展示相關產品數據 3、搜索產品,展示數據 4、············ 第一步:先確認好前端界面,以及數據使用的部分 第二步:將包含從資料庫查詢的數據html代碼和相關展 ...
  • 昨晚至今早,在新的項目中,實現一個小功能,就是當有訪問者瀏覽網頁在留言簿留言時,系統把留言內容發送至某一個郵箱或是抄送指定的郵箱中。 使用以前能正常發送郵件的代碼,但在新項目中,測試時,就是出現標題的錯誤:Mailbox unavailable. The server response was: 5 ...
  • 一、關於構造函數和析構函數 1、python中有構造函數和析構函數,和其他語言是一樣的。如果子類需要用到父類的構造函數,則需要在子類的構造函數中顯式的調用,且如果子類有自己的構造函數,必然不會自動調用父類的構造函數;但是對於沒有構造函數的子類來說,則會自動繼承父類的構造函數,且子類總會預設繼承多個父 ...
  • 本文內容全部出自《Python基礎教程》第二版,在此分享自己的學習之路。 lxx___歡迎轉載:http://www.cnblogs.com/Marlowes/p/5520948.htmllxx___ Created on Marlowes 本章將會介紹如何創建Python程式的圖形用戶界面(GUI ...
  • 前言: 本章會使用OC和Swift分別進行實現,需要瞭解Swift的小伙伴可以翻一下之前的博文 LBS和SoloMo(索羅門) LBS:基於位置的服務,根據定位展示周邊美食、景點等信息(全稱:Location Bassed Service) SoloMo:將位置社交、本地、移動化(全稱:Soclal ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...