JavaScript的動態加載腳本和樣式

本章主要講解上一章剩餘的獲取位置的DOM 方法、動態加載腳本和樣式。


一.元素位置
上一章已經通過幾組屬性可以獲取元素所需的位置,那麼這節課補充一個DOM 的方
法:getBoundingClientRect()。這個方法返回一個矩形對象,包含四個屬性:left、top、right
和bottom。分別表示元素各邊與頁面上邊和左邊的距離。

  1. var box = document.getElementById('box'); //獲取元素 
  2. alert(box.getBoundingClientRect().top); //元素上邊距離頁面上邊的距離 
  3. alert(box.getBoundingClientRect().right); //元素右邊距離頁面左邊的距離 
  4. alert(box.getBoundingClientRect().bottom); //元素下邊距離頁面上邊的距離 
  5. alert(box.getBoundingClientRect().left); //元素左邊距離頁面左邊的距離 

PS:IE、Firefox3+、Opera9.5、Chrome、Safari 支持,在IE 中,默認座標從(2,2)開始計
算,導致最終距離比其他瀏覽器多出兩個像素,我們需要做個兼容。

  1. document.documentElement.clientTop; //非IE 爲0,IE 爲2 
  2. document.documentElement.clientLeft; //非IE 爲0,IE 爲2 
  3. function getRect(element) { 
  4. var rect = element.getBoundingClientRect(); 
  5. var top = document.documentElement.clientTop; 
  6. var left = document.documentElement.clientLeft; 
  7. return { 
  8. top : rect.top - top, 
  9. bottom : rect.bottom - top, 
  10. left : rect.left - left, 
  11. right : rect.right - left 

PS:分別加上外邊據、內邊距、邊框和滾動條,用於測試所有瀏覽器是否一致。


二.動態腳本
當網站需求變大,腳本的需求也逐步變大。我們就不得不引入太多的JS 腳本而降低了
整站的性能,所以就出現了動態腳本的概念,在適時的時候加載相應的腳本。
比如:我們想在需要檢測瀏覽器的時候,再引入檢測文件。

  1. var flag = true//設置true 再加載 
  2. if (flag) { 
  3. loadScript('browserdetect.js'); //設置加載的js 
  4. function loadScript(url) { 
  5. var script = document.createElement('script'); 
  6. script.type = 'text/javascript'
  7. script.src = url; 
  8. //document.head.appendChild(script); //document.head 表示<head> 
  9. document.getElementsByTagName('head')[0].appendChild(script); 

PS:document.head 調用,IE 不支持,會報錯!

  1. //動態執行js 
  2. var script = document.createElement('script'); 
  3. script.type = 'text/javascript'
  4. var text = document.createTextNode("alert('Lee')"); //IE 瀏覽器報錯 
  5. script.appendChild(text); 
  6. document.getElementsByTagName('head')[0].appendChild(script); 

PS:IE 瀏覽器認爲script 是特殊元素,不能在訪問子節點。爲了兼容,可以使用text
屬性來代替。

  1. script.text = "alert('')"//IE 可以支持了。 

PS:當然,如果不支持text,那麼就可以針對不同的瀏覽器特性來使用不同的方法。這
裏就忽略寫法了。


三.動態樣式
爲了動態的加載樣式表,比如切換網站皮膚。樣式表有兩種方式進行加載,一種是<link>
標籤,一種是<style>標籤。

  1. //動態執行link 
  2. var flag = true
  3. if (flag) { 
  4. loadStyles('basic.css'); 
  5. function loadStyles(url) { 
  6. var link = document.createElement('link'); 
  7. link.rel = 'stylesheet'
  8. link.type = 'text/css'
  9. link.href = url; 
  10. document.getElementsByTagName('head')[0].appendChild(link); 
  11. //動態執行style 
  12. var flag = true
  13. if (flag) { 
  14. var style = document.createElement('style'); 
  15. style.type = 'text/css'
  16. //var box= document.createTextNode(#box{red}'); IE 不支持< /span> 
  17. //style.appendChild(box); 
  18. document.getElementsByTagName('head')[0].appendChild(style); 
  19. insertRule(document.styleSheets[0], '#box''red'< /span>, 0); 
  20. function insertRule(sheet, selectorText, cssText, position) { 
  21. //如果是非IE 
  22. if (sheet.insertRule) { 
  23. sheet.insertRule(selectorText + "{" + cssText + "}", position); 
  24. //如果是IE 
  25. else if (sheet.addRule) { 
  26. sheet.addRule(selectorText, cssText, position); 

 

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