Ответы пользователя по тегу JavaScript
  • Как синхронизировать модели JS фреймфорка с моделями сервера?

    @vitaliycto
    я храню правила валидации в модели и при отображении отправляю эти правила на клиента в json или в data атрибуты поля (в зависимости от шаблонизатора)
    ну и написать функцию которая будет обрабатывать эти правила не сложно)
    если нужно проверять поля на уникальность, то делать валидацию поля через сервер
    Ответ написан
    Комментировать
  • Как реализовать ротацию баннеров на 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 комментарий
  • JavaScript, JQuery.cookie?

    @vitaliycto
    $(document).ready(function() {
        var cs = $.cookie("cseconds"); 
        var seconds= cs || 57; 
    var counter=setInterval(timer, 1000);		
    	
    	function timer()
    	{
    		seconds=seconds-1;
    		$.cookie("cseconds", seconds);		
    				
    		if (seconds <= 0)
    		{
    			clearInterval(counter);
    			$(".action").fadeOut("fast");
    			return;
    		}
    
    		if (seconds <= 9)
    		{
    			document.getElementById("seconds1").innerHTML="0" + seconds;
    			return;
    		}
    
    		document.getElementById("seconds1").innerHTML=seconds;
    	}
    
    
    }
    Ответ написан
    Комментировать