这是因为 Cufon 创建元素的方式——总是给我带来麻烦。我所做的是在与文本进行任何 javascript 交互后重绘文本。最快的方法是调用Cufon.refresh()
which 将重绘页面上的所有 cufon 项目。或者,您可以专门针对它们。
当我这样做时,我倾向于创建一个函数来完成我将更改的 cufon 项目的初始绘制。然后我可以在我的排序(或其他)js 完成后调用该函数。
HTH :)
编辑回应评论
当然,不用担心 :) 您使用的排序插件具有回调功能,因此您可以这样做:
jQuery('.portfolio-sorted').quicksand( cache_list.find('li[data-value=Video]'), {
duration: 500,
},
function(){
Cufon.refresh();
// OR Cufon.replace('h2', { fontFamily: 'Quicksand' });
// OR Cufon.replace($('.portfolio-sorted li h2'), { fontFamily: 'Quicksand' });
});
编辑 2
对 - 发现了一些非常有趣的东西:流沙有一个选项就是为了这个目的。试试这个(注意 - 为了便于测试,我已将你的四个函数压缩为 1 - 可能这是你可以使用的东西?):
var cache_list = jQuery(this).clone().append('content');
//Add on click event handler to everything at once
jQuery('ul.portfolio-terms li a').click(function(e) {
//Call quicksand on the original works_list list(the one visible to the user)
//pass to it all the 'li' elements from the cached clone
//since we want to display them all
//get the target element based on data value
var target = 'li[data-value='+$(this).attr('data-value')+']';
if ($(this).attr('data-value') == "All") {
target = 'li';
}
jQuery('.portfolio-sorted').quicksand( cache_list.find(target), {
duration: 500,
enhancement: function() {
Cufon.refresh();
// OR Cufon.replace('h2', { fontFamily: 'Quicksand' });
// OR Cufon.replace($('.portfolio-sorted li h2'), { fontFamily: 'Quicksand' });
}
});
e.preventDefault();
});
认为可以做到(在 Chrome 和 FF 中对我有用)。enhancement
如果您想将其添加到您的原始函数中,该调用是重要的。
手指交叉!