Добавить функцию cookie / no-repeat для случайного обновления страницы

Я использовал этот код Java для вызова случайной HTML-страницы из списка 49 по заданному таймеру (или при обновлении страницы). Я хотел бы преобразовать его так, чтобы cookie - или что-то еще - сохраняло страницы, которые уже были показаны, чтобы при обновлении пользователь всегда получал новую страницу до тех пор, пока список не будет завершен, после чего файл cookie будет удален / удален,

Я нашел этот код для массива изображений cookie. Могу ли я использовать это с этим? Вариант этого также появляется здесь. Извините, мое кодирование довольно плохое. Любой совет приветствуется:

        <script type="text/javascript">
        var sites = [
        "name1.html",
        "name2.html",
        "name3.html",
        "name...etc.html",  
        "name49.html",              
        ]
        $(document).ready(function() {
            newPage();
        });
        function newPage() 
        {
            setTimeout(newPage, 60000);
            var min = 0;
            var max = 48;
            var num = Math.floor(Math.random() * (max - min + 1)) + min;
            $('#target').attr('src',sites[num]);
        }
    </script>

2 ответа

var numSites = 49;
var seen = new Array(numSites);

$(document).ready(function() {
    var cookie = unescape(getCookie("seen"));
    seen = cookie ? cookie.split(',') : seen;
    setTimeout(gotoNext, 60000);
});

function gotoNext() {
    var num = getRandom();
    var count = 0;
    while (seen[num] == 1) {
        num++;
        if (num >= numSites) {
            num = 0;
            count++;
            if (count > 1) {
                resetSeen();
                num = getRandom();
            }
        }
    }
    seen[num] = 1;
    setCookie("seen", escape(seen.join(',')), 365);
    window.location = "name" + num + ".html";
}

function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i].trim();
        if (c.indexOf(name)==0) return c.substring(name.length, c.length);
    }
    return "";
}

function setCookie(cname, cvalue, exdays) {
    var d = new Date();
    d.setTime(d.getTime() + (exdays*24*60*60*1000));
    var expires = "expires=" + d.toGMTString();
    document.cookie = cname + "=" + cvalue + "; " + expires;
}

function resetSeen() {
    for (var i=0; i<numSites; i++) {
        seen[i] = "";
    }
}

function getRandom() {
    return Math.ceil(Math.random() * numSites);
}

Похоже, вы используете jQuery, поэтому я рекомендую использовать плагин jquery для более аккуратного управления файлами cookie.

Скопируйте и вставьте содержимое этого URL в новый файл js на вашем сервере и добавьте его после файла jquery: https://raw.githubusercontent.com/carhartl/jquery-cookie/master/jquery.cookie.js

Или вы могли бы использовать функции получения / установки cookie из другого упомянутого вами ответа.

Главное помнить, что куки хранятся в виде строки, поэтому вы будете join()и split()в массиве.

Еще одна вещь, на которую стоит обратить внимание, это то, что, поскольку мы хотим получить случайный элемент из предметов, которые мы еще не посетили, более эффективно отслеживать их, а не те, которые мы посетили.

Это означает, что мы всегда выбираем случайный элемент из того, что осталось, вместо того, чтобы зацикливаться на всем и каждый раз проверять, были ли мы там уже, так как это очень неэффективно.

var sites = [ 'name1.html', 'name2.html', 'name3.html', ...etc... ],
    unvisited = sites.slice(0); // .slice(0) clones the array

// if the cookie has a value then make it into the unvisited array
if ( $.cookie( 'unvisited' ) )
    unvisited = $.cookie( 'unvisited' ).split( ',' );

$(document).ready(function() {
    newPage();
});

function newPage() {
    setTimeout( newPage, 60000 );

    // check if the unvisited array needs resetting
    if ( unvisited.length == 0 ) {
        unvisited = sites.slice(0);
        $.removeCookie( 'unvisited' );
    }

    // get a new index from the unvisited array
    var num = Math.floor( Math.random() * unvisited.length );

    // remove the item from the array and save the cookie
    var site = unvisited.splice( num, 1 )[ 0 ];

    // save the unvisited array minus the site we just spliced out
    $.cookie( 'unvisited', unvisited.join( ',' ) );

    $( '#target' ).attr( 'src', site );
}
Другие вопросы по тегам