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

    dummyman
    @dummyman
    диссидент-схизматик
    Отличная утилита montage
    montage balloon.gif medical.gif present.gif shading.gif  montage.jpg

    Параметры можно почитать тут
    Параметр смещения задается -geometry +4+4

    В ноде можно использовать canvas, но я бы все равно написал bash-скриптец с montage или convert.
    Ответ написан
    Комментировать
  • Как правильно настроить отправку данных с нескольких разных форм на одной странице?

    dummyman
    @dummyman
    диссидент-схизматик
    Вообще, форма - должен быть абстрактным элементом, имеет смысл объединить в одну форму если они все отправляются одновременно.
    Но можно вместо строки
    var msg = $("#forma").serialize();
    добавить любые значения
    var msg = $("#forma").serializeArray();
    msg.push({  
       name: "example1",
       value: $("#forma [name=example1]").val()
    });
    msg.push({  
       name: "example2",
       value: $("#forma [name=example2]").val()
    });
    Ответ написан
    Комментировать
  • Как правильно доработать муз. плеер на сайте?

    dummyman
    @dummyman
    диссидент-схизматик
    Попробуй soundmanager2 Я в комментарии писал подробнее
    Ответ написан
    Комментировать
  • Не срабатывает removeClass в скрипте как исправить?

    dummyman
    @dummyman
    диссидент-схизматик
    document.body.classList.remove('mobile-menu-open')
    Ответ написан
    Комментировать
  • Как сделать подобный интерактивный 3D план?

    dummyman
    @dummyman
    диссидент-схизматик
    Извиняюсь, поздно ответил на вопрос. Все это и многое другое, не показанное на сайте "Русский Дом" реализуется с помощью openlayers.
    Если непонятно как, спросите у этих ребят, у них тоже много опенсурсных проектов. Возможности openlayers можно заценить на демке на главной странице https://www.mapbox.com/ http://projectatlas.io. Да если обладать фантазией можно сделать и круче

    Нашел еще одну прикольную демку c 3d-домами на openlayers
    osmbuildings.org
    Ответ написан
    Комментировать
  • Где здесь утечка памяти?

    dummyman
    @dummyman
    диссидент-схизматик
    Во первых, вы неправильно используете анонимные функции, например
    const startTimer = (){ ... }
    и все остальные.
    Анонимные функции можно использовать только в ситуациях, когда их вызывают "не по имени" для сохранения контекста. Например, аргументом forEach().
    В данной ситуации лучшей синтаксической формы ничего не придумали:
    function startTimer(){ ... }
    Второй момент
    for ( const key in _headers ) {
            if ( {}.hasOwnProperty.call( _headers, key ) ) {
                headers.append( key, _headers[ key ] );
            }
        }

    и конкретно
    if ( {}.hasOwnProperty.call( _headers, key ) )
    Вы в цикле каждой итерацией создаете новый объект, это крайне не рациональное использование метода hasOwnProperty()
    по мне
    if (_headers != null && !!_headers[key] )
    может выглядело бы не так красиво, за то потребляет памяти по-меньше.
    Третий момент
    .catch( console.error )
    Вы можете немного сэкономить памяти использовав как раз по назначению анонимную функцию
    .catch( e => console.error(e) )
    В этом случае интерпритатор не будет искать ссылку на console.error при создании каждого промиса, и будет искать, соответственно, только в исключитальных ситуациях.
    Четвертый момент
    Поменьше пользуйтесь ключевым словом const, особенно, внутри методов и функций. Во-первых, так как они не выгружаются из памяти. Во вторых, const не дает никаких преимуществ в производительности, только лишь накладывает на интерпритатор обязанности следить чтобы ее случайно не перегрузили.
    Ответ написан
  • Необходимые знания для моделирования геометрических объектов на js?

    dummyman
    @dummyman
    диссидент-схизматик
    Начать можно с рафаэля https://dmitrybaranovskiy.github.io/raphael/
    Ответ написан
    Комментировать
  • Не работает плавный скролл Jquery. В чем ошибка?

    dummyman
    @dummyman
    диссидент-схизматик
    Вот бог его знает что там у вас не так, уже нет времени разбираться. Я вам оставлю мою версию демо-странички для плавного скролинга, там все в одном jade-файле
    doctype html
    html
        head
            style.
                html, body {background: white; background: #2c2c2c; }
                body, div { margin: 0; padding: 0;}
                html, body { width: 100%; height: 100% }
                body { padding-top: 50px; }
                nav { position: fixed; top: 0; height: 50px; width: 100%; background:#444444; border: 1px solid #313131; z-index: 1000; }
                nav ul { text-align: center; }
                nav ul li { display: inline-block; }
                nav ul li a { color: #D07C40; display: inline-block; text-decoration:none; margin: 0 7px; font-family: Diskoteque;  text-shadow: 0 0 0.5em #241600, 0 0 0.1em #000000; }
                nav ul li a:hover { color: #94D040;}
                nav ul li a:visited { color: #EFC75E; }
                nav ul li a:focus { color: #94D040; }
                nav ul li a:target { color: #94D040; }
                nav ul li a:active { color: #94D040; }
                .anchor { display: block; position:absolute; margin-top: -60px; }
                .photo { object-fit: contain; margin: 0 auto; position: relative; padding: 10px; margin: 15px 10px; background: white; box-shadow: 2px 2px 5px black;}
                .photo.hor { width: 640px; height: 480px; }
                .photo.vert { width: 480px; height: 640px; }
                .photo .num { position: absolute; z-index: 100; color: red; font-family: Tiza; width:2.5em; height: 2.1em; text-align: center; margin: .5em 0 0 .2em; }
                .photo img { width: 100%; height: 100%; display: block; margin: 0 auto; position: relative; max-width: 100%; max-height: 100%; object-fit: contain; }
                .photo .filename {position: absolute; z-index: 100; width:100%; height: 1.5em; margin-top: -2.1em; padding: .2em; }
                .photo .filename span { display:inline-block; color: #96969c; text-shadow: 0 0 0.5em #101c5d, 0 0 0.1em #000000; font-family: ZOMBIFIED; padding: .4em .2em 0 .2em; }
            script.
                function scrollTop(to, duration) {
                    if (document.body.scrollTop == to) return;
                    var diff = to - document.body.scrollTop;
                    var scrollStep = Math.PI / (duration / 10);
                    var count = 0, currPos;
                    start = document.body.scrollTop;
                    scrollInterval = setInterval(function(){
                        if (document.body.scrollTop != to) {
                            count = count + 1;
                            currPos = start + diff * (0.5 - 0.5 * Math.cos(count * scrollStep));
                            document.body.scrollTop = currPos;
                        }
                        else { clearInterval(scrollInterval); }
                    },10);
                }
    
                function scrollTo(e)
                {
                    e.preventDefault();
                    e.stopPropagation();
                    //var dest = document.getElementById(elID);
                    var destName = this.hash.substr(1);
                    if(destName.length> 0){
                        var dest = document.querySelector('a[name='+destName+']');
                        var destRect = dest.getBoundingClientRect();
                        var content  = document.querySelector('.content');
                        var contentRect = content.getBoundingClientRect();
                        var bodyRect = document.body.getBoundingClientRect();
                        var contentHeight = contentRect.height + 120;
                        var bodyHeight = bodyRect.height;
                        var offsetTop = destRect.top - bodyRect.top;
                        if(offsetTop > contentHeight - bodyHeight)
                            offsetTop = contentHeight - bodyHeight;
                        scrollTop(offsetTop, 200);
                    } else {
                        scrollTop(0, 200);
                    }
                }
        body
            nav: ul
                each photo, idx in photoList
                    li.item: a.nav-link(href="#"+(idx > 0 ? photo.name : ''))= idx+1
            script.
                Array.from(document.querySelectorAll('a.nav-link'))
                	.forEach((a)=>a.addEventListener('click', scrollTo));
            .content
                each photo, idx in photoList
                    div(style='clear:both;')
                    a.anchor(name=photo.name)
                    div(class=photo.vertical?'photo vert': 'photo hor')
                        .num
                            span= idx+1
                        img(src='file://'+photo.path)
                        .filename
                            span= photo.name
    Ответ написан
    Комментировать
  • Как получить название метода внутри метода?

    dummyman
    @dummyman
    диссидент-схизматик
    Писал на вскидку, могут быть косяки, не судите строго
    "use strict";
    var test={
      blabla:function(){
        console.log(fullTrace()[1].funcName);
      },
      blabla1:function(){
        console.log(fullTrace()[1].funcName);
      },
      blabla2:function(){
        console.log(JSON.stringify(fullTrace(), null, 4));
      }
    };
    
    (function start(){
        test.blabla();
        test.blabla1();
        test.blabla2();
    })();
    
    function fullTrace(){
        let stack;
        try{ throw Exception() } 
        catch(e) { stack = e.stack.split(/\n/g); }
        /* exp msg */ stack.shift();
        return stack.map(s => { 
            let row = s.replace(/^\s*at\s+/,''), m;
            if(m = row.match(/([^\s\(]+) \(([^:]+):(\d+):(\d+)\)/))
                return {funcName:m[1],filePath:m[2],strNum:m[3],colNum:m[4]}
            else if(m = row.match(/([^:]+):(\d+):(\d+)/))
                return {filePath:m[1],strNum:m[2],colNum:m[3]}
        } )
    }

    выведет
    Object.blabla
    Object.blabla1
    [
        {
            "funcName": "fullTrace",
            "filePath": "<anonymous>",
            "strNum": "22",
            "colNum": "10"
        },
        {
            "funcName": "Object.blabla2",
            "filePath": "<anonymous>",
            "strNum": "10",
            "colNum": "32"
        },
        {
            "funcName": "start",
            "filePath": "<anonymous>",
            "strNum": "17",
            "colNum": "10"
        },
        {
            "filePath": "<anonymous>",
            "strNum": "18",
            "colNum": "3"
        }
    ]
    Ответ написан
    Комментировать
  • Почему не подключается внешний скрипт?

    dummyman
    @dummyman
    диссидент-схизматик
    во-первых, уже лет 10 все используют querySelector вместо getElementById и getElementsByClassName.
    во-вторых время выполнения скрипта, так, как вы его подклдючили, - до появления элемента #scroller на странице.
    document.addEventListener("DOMContentLoaded", function(event) {
       
    var scroller = document.querySelector('#scroller');
    var main = document.querySelector('.main');
    var other = document.querySelector('.other');
    var container = document.querySelector('.container');
    
    scroller.onclick = function () {
      var topPosition = getComputedStyle(container).marginTop;
      container.style.marginLeft = parseInt(topPosition) - window.innerHeight + 'px';
    }
    
      });
    Ответ написан
    3 комментария
  • Перемещение элементов по DOM?

    dummyman
    @dummyman
    диссидент-схизматик
    Все правильно, оберните текст в <span> и работайте с ним из span.text();

    $('.tn-manager').text() выдаст вам не только текст непосредственно внутри себя, а весь текст, встречающийся в нем и в дочерних элементах. Соответственно, $this.text('') удаляет по тем же принципам.
    Ответ написан
    Комментировать
  • Как перехватить websocket-соединения?

    dummyman
    @dummyman
    диссидент-схизматик
    slimerjs.orgдля пошаговости действий можно использовать совместно с casperjs.org .
    ну а управлять этим хозяйством пошагово можно хоть с nodejs, хоть с python через stdin, получать данные через stdout
    Ответ написан
    Комментировать
  • JavaScript form select option, как передать произвольную переменную из атрибутов optino по по onclick?

    dummyman
    @dummyman
    диссидент-схизматик
    Не уверен, что сработает с нестандартными атрибутами, но со стандартными работает:
    document.querySelector('form select[name]=Zakaz').attributes['desc']
    если есть jQuery:
    $('form select[name]=Zakaz').attr('desc')
    Ответ написан
  • Почему не отменяет реакция по умолчанию на событие?

    dummyman
    @dummyman
    диссидент-схизматик
    event.preventDefalult()
    правильно
    event.preventDefault()
    Ответ написан
    5 комментариев
  • Как сделать предпросмотр изображений при загрузке с input type=[file]?

    dummyman
    @dummyman
    диссидент-схизматик
    Когда в input[type=file] выбрал диалогом файлы или кинул их через dragndrop, у тебя в input.files будет массив с локальными путями к файлам пользователя. просто создаешь новый < img > и в src= устанавливаешь локальный путь к изображению и браузер его подцепит с локального диска.
    Ответ написан
  • Есть уроки по созданию своего сервера и базы данных?

    dummyman
    @dummyman
    диссидент-схизматик
    Сделать сайт без перезагрузки, состоящий из страниц (главная, о нас, услуги, блог, контакты) и на странице услуги есть выбор из 20 услуг, а в каждой есть по 20 Тамбов с плавной сменой текста без перезагрузки страницы.
    Я же не буду хранить столько информации, картинок и т.д. в html

    Это глупо! Выдавайте все тексты и данные в html, иначе поисковые системы не проиндексируют сайт и смысл существования такого сайта, как маркетинговый инструмент, нулевой.
    Ответ написан
  • Ajax-запросы не работает почему?

    dummyman
    @dummyman
    диссидент-схизматик
    здесь ошибка data.legth правильно length
    jquery.parseJSON правильно JSON.parse
    Ответ написан
    Комментировать
  • Как заблокировать остальные чекбоксы при клике по чекбоксу с value=0, к примеру?

    dummyman
    @dummyman
    диссидент-схизматик
    вам скорее всего нужен radiobox
    Ответ написан
    Комментировать
  • Как описать Schema в mongoDB?

    dummyman
    @dummyman
    диссидент-схизматик
    Вообще, на каждый перечисляемый тип можно создать по схеме. Но под ваши потребности БД не обязательно использовать. Чем вам не подошел уже являющийся как стандарт формат хранения https://taskwarrior.org/ ? Локально может хранить в текстовике а сервер у них уже свой написан.
    Ответ написан
    Комментировать
  • Перебор всех элементов с заданным интервалом времени?

    dummyman
    @dummyman
    диссидент-схизматик
    Вам надо создать промис, и, перечислить все значения

    Obj['a'].forEach(val => p.then(logstdout(val)))

    тогда сама функция будет выглядеть приблизительно так:
    function logstdout(val) {
       return function(cb){
          console.log(val);
          setTimeout(cb, 1000);
       }
    }
    Ответ написан