这一点也不难。如果您已经按照问题中提到的Shopify tutorial 实现了色板,那么您只需向selectCallback 函数添加一些额外的代码。
添加到 product.liquid:
...
var selectCallback = function(variant, selector) {
...
var selectedSize = jQuery('.size.options li.selected span').text();
if (selectedSize.length > 0) {
var variants = selector.product.variants;
var variantTitles = [];
var i;
for (i = 0; i < variants.length; i++) {
variantTitles.push(variants[i].title);
}
jQuery('.color.options li').each( function() {
var variantTitle = selectedSize + " / " + jQuery('div', this).text();
// if variantTitle is a valid variant & not sold out, remove unavailable class
var variantIndex = jQuery.inArray(variantTitle, variantTitles);
if (variantIndex != -1 && variants[variantIndex].available == true) {
jQuery('span', this).removeClass('unavailable');
}
// if not a valid variant or sold out, add unavailable class
else {
jQuery('span', this).addClass('unavailable');
}
});
}
};
...
添加到 swatches.liquid(在<style> 标签内):
.unavailable { opacity: 0.2; }
那么如果你有 2 种尺寸(SM、MD)和 2 种颜色(红色、蓝色),并且“SM / Red”已售罄,你会得到这个:
我也将此代码放在gist 中。