0

首先,我道歉。我知道我想做什么,但不知道我应该怎么称呼它,也不知道该怎么问,所以我的谷歌搜索没有结果。

我有一些动画用来显示/隐藏文本。我试图将它全部包装在一个对象中,但是我这样做的方式是,我每次都必须运行一些计算代码,因为我不知道它存储在哪个部分。

现在,我讨厌的是我calculatePositions(entry);在每次传递时都重新运行一个函数,而不是使用保存的值。麻烦的是,这将发生在多个元素上,因此位置数组需要更改。有没有办法将位置数组保存到特定的 DOM 元素并只计算一次?我可以将这些函数和属性附加到 DOM 元素而不是entry每次都传入对象吗?

我的代码:

var theShort = {};

theShort.toggle = function(){
    var positions = new Array;

    function calculatePositions(entry){
        /*
        positions = Nasty calculation code
        */
    }

    function showLong(entry){
        calculatePositions(entry);
        //My toggle code is obviously more complex and uses the positions array.
        //But for simplicity sake, I've omitted it
        $(entry).find('.tsl-theshort').show();
        $(entry).find('.tsl-thelong').hide();
    }

    function showShort(entry){
        calculatePositions(entry);
        $(entry).find('.tsl-theshort').show();
        $(entry).find('.tsl-thelong').hide();
    }

    return {
        init: function (){
            $('.tsl-showLong').click(function(){
                showLong($(this).closest('.entry-content'));
                return false;
            });

            $('.tsl-showShort').click(function(){
                showShort($(this).closest('.entry-content'));
                return false;
            });
        }
    };
}();

jQuery(document).ready(function($){
    theShort.toggle.init();
});
4

1 回答 1

0

如果您担心每次都运行计算函数,请根据元素的 id 设置缓存。如果每个元素在 dom 中都有一个唯一的 ID,您可以执行类似的操作

var cache = {};

function showLong(entry){
    var id = $(entry).attr('id');
    if(!cache[id])
        cache[id] = calculatePositions(entry);

    //My toggle code is obviously more complex and uses the positions array.
    //But for simplicity sake, I've omitted it
    $(entry).find('.tsl-theshort').show();
    $(entry).find('.tsl-thelong').hide();
}

function showShort(entry){
    var id = $(entry).attr('id');
    if(!cache[id])
        cache[id] = calculatePositions(entry);

    $(entry).find('.tsl-theshort').show();
    $(entry).find('.tsl-thelong').hide();
}

然后,当您希望查找元素的计算时,

var id = $(element).attr('id');
var calculation = cache[id];
于 2012-08-23T17:55:16.903 回答