2010-08-28 66 views
10

我想知道用Javascript刷新頁面時調用隨機CSS文件的最佳方式是什麼?在頁面刷新時加載隨機CSS

非常感謝

+10

它必須是Javascript嗎?在服務器端它會容易得多,而且不那麼笨拙。 – 2010-08-28 16:24:09

+0

我同意Pekka。 – 2010-08-28 16:25:17

+2

這樣做的問題是,當您的Javascript運行時,您的DOM需要完成,因此瀏覽器可能已經開始渲染頁面。在這一點上改變CSS會打破這個流程,並且可能會減慢頁面渲染速度,並且當瀏覽器改變樣式時用戶會看到'閃爍'。 – 2010-08-28 16:28:21

回答

0

document.ready附加一個<link>元素。

var randomFileName=Math.random(); // or whatever 

$(document).ready(function() { 
    $('head').append('<link rel="stylesheet" type="text/css" href="' + randomFileName + '.css">'); 
}); 

未經檢驗。如上所述,對於服務器端腳本來說,它可能是一個更好的(讀取:更加兼容)的想法,可以直接在頁面的HTML中隨機輸出文件名,而不是使用JS欺騙。

+0

對於其他人的參考 - 這種方法在href中添加一個隨機數,所以它不可能與一個css文件同步。 – Rob 2010-08-29 12:08:08

+0

@Rob:想出一個文件名部分留給讀者練習。 :) – josh3736 2010-08-29 16:33:02

5

如果你使用PHP,您可以讀取CSS目錄,並選擇一個隨機文件是這樣的:

<?php 
$css_dir = '/css'; 
$files = array(); 

foreach(glob($cssdir.'/*.css') as $file) 
{ 
    $array[] = $file; 
} 

echo '<link rel="stylesheet" type="text/css" href="' . array_rand($files, 1) . '">'; 
?> 
+0

剛剛嘗試過這種技術,但沒有得到迴應,因此沒有CSS文件得到加載 – egr103 2013-04-14 12:29:04

8
var link = []; 
link[0] = "http://site.com/css/style1.css"; 
link[1] = "http://site.com/css/style2.css"; 
link[2] = "http://site.com/css/style3.css"; 


$(function() { 
    var style = link[Math.floor(Math.random() * link.length)]; 
    $('<link />',{ 
     rel :'stylesheet', 
     type:'text/css', 
     href: style 
    }).appendTo('head'); 
}); 

編輯:謝謝羅勒西迪基!

var link = []; 
link[0] = "http://site.com/css/style1.css"; 
link[1] = "http://site.com/css/style2.css"; 
link[2] = "http://site.com/css/style3.css"; 


$(function() { 
    var style = link[Math.floor(Math.random() * link.length)]; 
    if (document.createStyleSheet){ 
     document.createStyleSheet(style); 
    }else{ 
     $('<link />',{ 
      rel :'stylesheet', 
      type:'text/css', 
      href: style 
     }).appendTo('head'); 
    } 
}); 
+0

我試過這個,但它得到應用後頁面已加載,所以造型沒有得到應用 – bsiddiqui 2013-04-19 15:23:18

+0

@BasilSiddiqui感謝您注意..請參閱這[教程](http://www.vidalquevedo.com/how-to-load-css-stylesheets-dynamically-with-jquery)以獲得進一步的指導!美好的一天! :) – 2013-04-20 02:27:30

0

,你可以只用JavaScript的

<p id="demo"></p> 

<script> 
var r=Math.random(); 
var x=document.getElementById("demo") 
if (r>0.5) 
{ 
x.innerHTML="<a href='http://w3schools.com'>Visit W3Schools</a>"; 
} 
else 
{ 
x.innerHTML="<a href='http://wwf.org'>Visit WWF</a>"; 
} 
</script> 
0

如果你想使用JavaScript的最好方法是加載生成隨機鏈接做到這一點以正常方式在單個文件中的所有隨機樣式。

然後在前面加上所有的隨機CSS與一個數字,如:

.random-1 h1 { 
    color: blue; 
} 
.random-2 h1 { 
    color: red; 
} 
/* ... etc... */ 

然後只需一個隨機類添加到身上帶的JavaScript。

document.getElementsByTagName('body')[0].className+=' random-' + Math.floor((Math.random() * 10) + 1); 

這應該限制加載和渲染問題,而且您不必擔心何時調用JavaScript。 (再加上你可以選擇更改爲另一種隨機樣式,更多的JavaScript)

(渲染問題將取決於您正在做什麼樣的更改 - 雖然這與您看到的DOM對象的隱藏和顯示沒有區別許多網站)。

+0

這也將使您的服務器腳本更簡單。只需在創建頁面時將一個類添加到正文中。 – 2014-05-10 10:04:11