我的想法是我使用一些mixin为图像生成域。假设我有2个具有相同图像的域,我希望能够从一个域加载一半图像,从另一个域加载一半图像。
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?
答案 0 :(得分:1)
在Compass配置文件(即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,这种方法很弱。
答案 1 :(得分:0)
实际上,您可以直接将代码移植到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代码段中还有一些错误。正确的代码是:
$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是绝对正确的。负载平衡的这种方法是业余性和不良实践。