Ответы пользователя по тегу JavaScript
  • Как сделать счетчик через ООП?

    And__Smi
    @And__Smi Автор вопроса
    Благодаря одному пользователю данного сайта, который удалил свой ответ, видимо (не знаю зачем, а потом еще говорят, гугли, когда люди чистят за собой), я привел свой код к такому решению и это еще не окончательное, в планах создать еще два метода - для counter_time и для layout.innerHTML. Пока не соображу как, вот решение, которое меня устроило, но не до конца, о чем я упомянул выше:
    ;
    var counterList = document.querySelectorAll(".counter");
    function myCounter(counterEl){
        this.counter = counterEl;
        this.init = function(){
            var counter_event;
            var counter_theme;
            var counter_date;
            var counter_link;
    
            if(this.counter.hasAttribute("data-event")){
                counter_event = this.counter.getAttribute("data-event").replace(/\s/g, '');
            }
            if(this.counter.hasAttribute("data-theme")){
                counter_theme = this.counter.getAttribute("data-theme").replace(/\s/g, '');
            }
            else if(this.counter.hasAttribute("data-background")){
                counter_theme = this.counter.getAttribute("data-background").replace(/\s/g, '');
            }
            if(this.counter.hasAttribute("data-date")){
                counter_date = this.counter.getAttribute("data-date").replace(/\s/g, '');
            }
            else if(this.counter.hasAttribute("data-day")){
                counter_date = this.counter.getAttribute("data-day").replace(/\s/g, '');
            }
            if(this.counter.hasAttribute("data-link")){
                counter_link = this.counter.getAttribute("data-link").replace(/\s/g, '');
            }
    
            var counterChild = this.makeCounter(counter_event, counter_theme, counter_date, counter_link);
            this.counter.appendChild(counterChild);
        };
        this.makeCounter = function(theme, event, day, link){
            var block = document.createElement("div");
            var styles = document.createElement("link");
    
            if(styles){
                styles.href="j/css/counter"+ "/" + theme + "/" + event + ".css";
                styles.rel = "stylesheet";
    
                document.querySelectorAll("head")[0].appendChild(styles);
            }
    
            if(block){
                block.className = theme + "-" + event + " template";
    
                var timerIf = new Date(day.replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1')) - new Date();
                if(timerIf <= 0){
                    block.className += " zero";
                }
                else{
                    var wrap = document.createElement("div");
                    if(wrap){
                        wrap.className = "counter-wrap";
    
                        block.appendChild(wrap);
                    }
                }
    
                if(link){
                    var linker = document.createElement("a");
                    if(linker){
                        linker.className = "counter-link";
                        linker.href=link;
                        linker.target="_blank";
    
                        block.appendChild(linker);
                    }
                }
    
                var resetCount = {
                    obj: null
                };
    
                var timer = setInterval(this.makeCount.bind(this, wrap, day, resetCount), 1000);
    
                resetCount.obj = timer;
            }
    
            return block;
        };
        this.makeCount = function(layout, timecount, reset){
            var now = new Date();
            var eventDate = new Date(timecount.replace(/(\d+).(\d+).(\d+)/, '$3/$2/$1'));
            var distance = eventDate - now;
    
            var counterTime = {
                days: Math.floor(distance / (1000 * 60 * 60 * 24)),
                hours: Math.floor(distance % (1000 * 60 * 60 * 24) / (1000 * 60 * 60)),
                mins: Math.floor(distance % (1000 * 60 * 60) / (1000 * 60)),
                secs: Math.floor(distance % (1000 * 60) / 1000)
            };
    
            for(var i in counterTime){
                if(counterTime[i] < 10){
                    counterTime[i] = "0" + counterTime[i];
                }
            }
    
            if(distance <= 0){
                if(reset.obj !== null){
                    clearInterval(reset.obj);
                }
            }
            else{
                layout.innerHTML = '<div id="days" class="inline">'+counterTime.days+'<span>:</span></div>';
                layout.innerHTML += '<div id="hours" class="inline">'+counterTime.hours+'<span>:</span></div>';
                layout.innerHTML += '<div id="mins" class="inline">'+counterTime.mins+'<span>:</span></div>';
                layout.innerHTML += '<div id="secs" class="inline">'+counterTime.secs+'</div>';
            }
        };
    }
    
    for(var c = 0; c<counterList.length; c++){
        var counter = new myCounter(counterList[c]);
        counter.init();
    }


    Если есть у кого что сказать по коду, как можно было бы оформить еще лучше, я не против послушать и пообщаться на данную тематику. Сразу оговорюсь заранее (я до этого не сказал), код пишется исключительно под ие8+ и никак иначе. Все новомодные штучки, к сожалению, приходится избегать, включая const, let, class.
    Ответ написан
  • Почему не работает \n?

    And__Smi
    @And__Smi Автор вопроса
    Решил проблему, всем спасибо. Тупо админка глючная у движка, решил путем подмены файла через фтп - написал так же как и надо было до этого alert("hello \n world") и заменил на сервере этот файл. Как итог - ничего не добавилось лишнего и перенос осуществился благополучно. Всем спасибо.
    Ответ написан
    Комментировать
  • Как с помощью javascript определить устройство, с которого зашли на сайт?

    And__Smi
    @And__Smi Автор вопроса
    всем спасибо за полезные советы, нашел вот простой, не громоздкий, самое главное(!), скрипт:
    if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)) {
        // код для мобильных устройств
      } else {
        // код для обычных устройств
    }
    Ответ написан
    1 комментарий