2013-06-21 64 views
0

這個想法是我使用一些mixin爲圖像生成域。假設我有2個具有相同圖像的域,我希望能夠從一個域加載一半圖像,另一半加載一半圖像。SASS爲多個靜態生成URL

在PHP中,這是一樣的東西

$domains = array('domain1', 'domain2', 'domain3'); 
$domainIdx = 0; 

function getDomain(){ 
    $rVal = $domains[$domainIdx]; 
    $domainIdx = $domainIdx++ >= count($domains) ? 0 : $domainIdx++; 
    return $rVal; 
} 

我稱之爲我每次渲染的圖像來獲得一個域爲它的時間。我怎麼能在SASS中的mixin中做類似的事情,所以當生成CSS時,它將在域列表之間分發所有的URL?

+3

這聽起來像是一個更好的負載平衡器解決的問題。 – cimmanon

+0

這實際上是一個網頁加載優化黑客,並沒有涉及到負載平衡。將在週一嘗試解決方案並相應獎勵!非常感謝隊友:) – ptheofan

回答

0

其實,你可以端口exitsting代碼SASS非常直截了當:

$domains:  'domain1.com' 'domain2.org' 'domain3.net' 
$current-domain: 1 

@function get-domain() 
    $domain: nth($domains, $current-domain) 
    $current-domain: $current-domain + 1 
    @if $current-domain > length($domains) 
    $current-domain: 1 
    @return $domain 

然後,您可以使用它像這樣:

@for $i from 1 through 10 
    .element-#{$i} 
    background-image: url("http://#{get-domain()}/images/foo.png") 

演示:http://sassbin.com/gist/5831644/

而且,你」我的PHP代碼片段中有一些bug。正確的代碼是:

$domains = array('domain1', 'domain2', 'domain3'); 
$domainIdx = 0; 

function getDomain(){ 
    global $domains, $domainIdx; 
    $rVal = $domains[$domainIdx]; 
    $domainIdx = $domainIdx + 1>= count($domains) ? 0 : $domainIdx + 1; 
    return $rVal; 
} 

而且@cimmanon是絕對正確的。這種負載均衡的方法是業餘性和不良實踐。

+0

該片段是一個例子,而不是實際的代碼;) – ptheofan

1

在您的指南針配置文件(即config.rb),你可以使用asset_host功能,像這樣:

asset_host_list = ['domain.com', 'domain.org'] 
asset_host do |asset| 
    "http://%s" % asset_host_list[asset.hash % asset_host_list.length] 
end 

但是,我@cimmanon同意,這種做法是微弱的。