Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-id';时间戳是时间戳,如果超过10,则删除最旧的时间戳_Javascript_Jquery - Fatal编程技术网

Javascript-id';时间戳是时间戳,如果超过10,则删除最旧的时间戳

Javascript-id';时间戳是时间戳,如果超过10,则删除最旧的时间戳,javascript,jquery,Javascript,Jquery,有点棘手,至少对我来说是这样。以下是场景: <div id="gifs"> <img src="gif/1.jpg" alt="" > <img src="gif/10.jpg" alt="" > <img src="gif/15.jpg" alt="" > <img src="gif/20.jpg" alt="" > <img src="gif/5.jpg" alt="" > </div> 非常感谢您的帮

有点棘手,至少对我来说是这样。以下是场景:

<div id="gifs"> 
<img src="gif/1.jpg" alt="" >
<img src="gif/10.jpg" alt="" >
<img src="gif/15.jpg" alt="" >
<img src="gif/20.jpg" alt="" >
<img src="gif/5.jpg" alt="" >
</div> 

非常感谢您的帮助。

我建议您设置一个数组来存储当前显示的四个文件的信息,然后使用此信息了解您何时已经有四个文件,以及在文件已满时删除哪一个文件。这至少是一个天真的答案:也许有更聪明的方法可以做到这一点?

这里只是.each()的一部分

var stamps=new Array();
$('.on')。每个(函数(e){
邮票[]=$(e).attr('id');
});
如果(${stamps.length}>4){
sort(函数sortNumber(a,b){返回b-a;})
对于(var i=4;i我会这样做:

(function () {
    // cache images so that we can use them later
    var $imgs = $("#gifs img");
    $imgs.click(function () {
        var $this = $(this);
        if (!$this.hasClass("on")) {
            // get all IDs of those images that are "on"
            var ids = Array.prototype.slice.call($imgs.filter(".on").map(function () { return this.id; }));
            if (ids.length >= 3) {
                // get oldest image by sorting the IDs in ascending order and get the first
                var $oldest = $("#"+ids.sort()[0]);
                // change oldest image
                $oldest.attr("src", function () { return this.src.replace("gif", "jpg"); });
                $oldest.removeClass("on");
            }
            // change for clicked image
            $this.attr("id", new Date().getTime());
            $this.attr("src", function () { return this.src.replace("jpg", "gif"); });
            $this.addClass("on");
        }
    });
})();

整个过程被包装在一个函数中,以避免污染全局变量范围。

以下是我对使用javascript数组推送和移位函数的理解

也许能把这整理一下

$(function() {

var gifs = $('img[src$=gif]').get(); // Get all gifs
$('#images img').click(function() {
    console.log(gifs);
    var img = $(this);
    var src = img.attr('src');
    img.attr('src', src.replace('jpg', 'gifs'));
    if (gifs.indexOf(this) === -1) {
        gifs.push(this);
    }
    if (gifs.length > 4) {
        var last = gifs.shift();
        src = $(last).attr('src');
        $(last).attr('src', src.replace('gif', 'jpg'));
    }
    console.log(gifs);
});

});

我远非javascript专家,但我想我理解你的困境。你可能感兴趣的是:

我们的想法是,您将保持此阵列的设置,以存储(最多)4个与图像扩展内容相关的ID(稍后我将讨论单元化内容):

诀窍在于如何访问此数组。让我们添加另一个变量:

var currentIndex=0;
我们的想法是,您只需要有一个包含4个元素的列表,如果您添加第五个元素,您将替换最旧的元素。下面介绍访问的工作原理:

让我们加上“a”:

['a','uninitialized','uninitialized','uninitializedl']
       ^ currentIndex
现在让我们加上“b”和“c”:

['a','b','c','uninitialized']
               ^ currentIndex
现在是棘手的部分。到目前为止,我们已经将currentIndex增加了1(或者我们认为是这样)。让我们看看当我们添加“d”时会发生什么:

[ 'a' ,'b','c','d']
   ^ currentIndex
因此,循环缓冲区中的“循环”。当您向数组中添加足够的元素时,索引将返回到开始处。非常棒。如果您想知道这有多容易,它并不太复杂。要在循环currentIndex的同时“增加”currentIndex,无需使用“如果”:

currentIndex=(currentIndex+1)%4
(显然,用您想要的缓冲区长度替换4)

但是,如果我们想放入另一个元素,比如(选择一个随机字母),如果我们尝试添加“e”,会发生什么呢

[ 'e' , 'b' , 'c', 'd'] 
         ^ curentIndex
嗯,数组不会神奇地扩展,所以它用“e”替换了“a”(要添加的最古老的元素)。因此,这个实用程序解决了这个问题

如果我要解决这个问题,我会实现以下内容(假设我已经定义了前面的内容):

还有bam!没有难看的DOM技术,只是一些好的老式简单编程语言不可知的解决方案。而且它有点固定时间(不像排序整个标记)。你甚至不需要麻烦时间戳,只需要给你的东西一些“唯一”的ID(你甚至可以使用循环缓冲区为你的标记分配ID!)

(循环缓冲区通常有更多用于访问元素等的样板文件,但这里我只是试图坚持必要的。希望它不会简化到失去概念的程度)

对不起,我的Javascript不好,我对webdev是个外国人。

$(“#gifs img”)。单击(函数(){
$("#gifs img").click(function () { 
        var original = $(this).attr("src"); 
        var newsrc = original.replace('.jpg','.gif');
        if(!$(this).hasClass('on')){
            $(this).attr("src" , '');
            $(this).attr("src", newsrc );
            $(this).addClass('on');

            var t = new Date();
            var time = t.getTime();

            $(this).attr('id' , time);

            var minimum = time;
            var counter = 0;
            $('.on').each(function(){ 

                counter = counter +1;   
                var current  = $(this).attr('id')*1;  

                if( current <= minimum ){ minimum = $(this).attr('id')*1; }

            });

            if(counter >= 10){ 
                var oldestsrc = $('#'+minimum).attr("src"); 
                var oldestnewsrc = oldestsrc.replace('.gif','.jpg');
                $('#'+minimum).attr("src",oldestnewsrc);
                $('#'+minimum).removeClass('on');
                $('#'+minimum).attr('id','');

                counter = 0;
            }


        }
});
var original=$(this.attr(“src”); var newsrc=original.replace('.jpg','.gif'); if(!$(this.hasClass('on')){ $(this.attr(“src”),''; $(this.attr(“src”,newsrc); $(this.addClass('on'); var t=新日期(); var time=t.getTime(); $(this.attr('id',time); var最小值=时间; var计数器=0; $('.on')。每个(函数(){ 计数器=计数器+1; var current=$(this.attr('id')*1; 如果(电流=10){ var oldestsrc=$('#'+最小值).attr(“src”); var oldestnewsrc=oldestsrc.replace('.gif','.jpg'); $('#'+最小值).attr(“src”,oldestnewsrc); $('#'+最小值).removeClass('on'); $('#'+最小值).attr('id',''); 计数器=0; } } });
基本上,我在每个函数上都有问题。这应该存储时间戳,如果数组长度超过4,则获取最旧的时间戳,然后将其切换回jpg…我想我不明白为什么要使用时间戳。以后是否出于某种原因需要时间戳?如果不需要,则使用一个每次单击某个内容时,st都会增加1。我使用时间戳来查找哪一个是最老的。如果您查看此处的其他一些建议,则实际上不需要时间戳。有趣的是……我无法理解所有内容,但它似乎缺少这类计数器(当时为4个)。你会怎么做?@denislexic:我添加了一些注释;希望能有所帮助。对类似的内容使用排序应该会在某些地方引起警告。@Dasuraga,你有两个选择来确定列表中最古老的元素。你可以按时间戳/年龄排序,或者使用队列从底部提取更改的元素并将它们放在顶部。Ei另外,您正在排序(主动与被动)。使用“排序”应该允许动态添加新元素,而不必将它们添加到队列中,等等。我相信排序是最灵活的解决方案。我有一个想法,使用4个元素的堆栈并弹出最旧的元素,但这里的循环缓冲区似乎避免了弹出任何东西,因此非常好。
currentIndex=(currentIndex+1)%4
[ 'e' , 'b' , 'c', 'd'] 
         ^ curentIndex
function addGif(id){
    if(gifs[currentIndex]=='uninitialized')//We haven't gotten to 4 gifs yet, no magic necessary
         gifs[currentIndex]=id;
    else{//we've reached 4 gifs, so now it's time for some "magic"
           //do whatever you need to do with the oldest gif(at currentIndex)
           removeGif(gifs[currentIndex]);//obviously this function will need to be written
          gifs[currentIndex]=id;
   }
    //don't forget to increment the index!
    currentIndex=(currentIndex+1)%buffer;
}
$("#gifs img").click(function () { 
        var original = $(this).attr("src"); 
        var newsrc = original.replace('.jpg','.gif');
        if(!$(this).hasClass('on')){
            $(this).attr("src" , '');
            $(this).attr("src", newsrc );
            $(this).addClass('on');

            var t = new Date();
            var time = t.getTime();

            $(this).attr('id' , time);

            var minimum = time;
            var counter = 0;
            $('.on').each(function(){ 

                counter = counter +1;   
                var current  = $(this).attr('id')*1;  

                if( current <= minimum ){ minimum = $(this).attr('id')*1; }

            });

            if(counter >= 10){ 
                var oldestsrc = $('#'+minimum).attr("src"); 
                var oldestnewsrc = oldestsrc.replace('.gif','.jpg');
                $('#'+minimum).attr("src",oldestnewsrc);
                $('#'+minimum).removeClass('on');
                $('#'+minimum).attr('id','');

                counter = 0;
            }


        }
});