Ответы пользователя по тегу Интернет-реклама
  • Как реализовать ротацию баннеров на JavaScript?

    @vitaliycto
    очень грубо конечно но..:
    var banners = [
        {
            url: 'a.jpg',
     
            chance: 100,
            daysWeek: '1,3,4,7'
        },
        {
            url: 'b',
            chance: 50,
            daysWeek: '1,3,4,7'
        },
        {
            url: 'c',
            chance: 30,
            daysWeek: '1,3,4,7'
        }
    ];
    var rotoBann = function (banners, targetId, newoptions) {
        if (typeof banners == 'undefined' || banners.length == 0)
            return false;
        var options = {
            timeout: 1000,
            number: 2, //колличество выбираемых баннеров. 0 - без ограничений,
            random: true
        };
        newoptions = newoptions || {};
        for (var i in options)
            options[i] = newoptions[i] || options[i];
        var currentDayWeek = (new Date()).getDay();
        var biggestChance = 0;
        var filteredByDays = [];
        for (var i in banners) {
            var daysWeek = banners[i].daysWeek.split(',');
            for (var i2 in daysWeek) {
                if (daysWeek[i2] == currentDayWeek) {
                    filteredByDays.push(banners[i]);
                    break;
                }
            }
        }
        for (var i in filteredByDays) {
            biggestChance = (filteredByDays[i].chance > biggestChance) ? filteredByDays[i].chance : biggestChance;
        }
        filteredByDays.sort(function (a, b) {
            return  b.chance - a.chance
        });
        var selectedBanners = [];
        for (var i in filteredByDays) {
            if (options.number > 0 && selectedBanners.length == options.number)
                break;
            if (options.number == 0 || options.number >= filteredByDays.length || filteredByDays[i].chance == biggestChance) {
                selectedBanners.push(filteredByDays[i].url);
                continue;
            }
    
            if (Math.round(Math.random()) * 100 < filteredByDays[i].chance / biggestChance)
                selectedBanners.push(filteredByDays[i].url);
        }
        if (options.random)
            selectedBanners.sort(function () {
                return Math.round(Math.random());
            });
        var cS = 0;
        setInterval(function () {
            document.getElementById(targetId).innerHTML = '<img src="'+selectedBanners[cS]+'"/>';
            cS = (cS == selectedBanners.length - 1) ? 0 : cS + 1;
        }, options.timeout);
    }
    new rotoBann(banners, 'test');

    лучше отделить логику выборки от отображения
    Ответ написан
    1 комментарий