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

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Строковый массив, а не строчный.
    var positionArr = ['1', '2', '3.1', '4.5'];
    var result = positionArr.map(parseFloat);
    console.log( 'result is', result);
    Ответ написан
    Комментировать
  • На чём лучше писать десктопные приложения?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    На нативных ЯП — C# вполне адекватный инструмент. Десктопные приложения с HTML/JS очень толстые и медленные. Если уж и делать - то лучшим выбором будет NWJS (отличная документация, постоянно выходят новые версия с багфиксами и обновлениями, новые фичи, разработчики открыты к диалогу с юзерами, ничего лишнего нету, большое коммьюнити). Электрон не советую - т.к. он менее стабильный (есть печальный опыт попытки использования в продакшене) и плюс есть баги, которые не будут исправляться.
    Ответ написан
    2 комментария
  • Как закрывать подменю при открытии другого подменю?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Сохранить предыдущий открытый элемент в переменную и закрывать его при открытии текущего.
    Ответ написан
    Комментировать
  • Как упростить такой кусок кода?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Логичным выглядит подписаться на событие "изменение данных" на сервере. Если на сервере нет такого - то реализовать. А если сервер чужой и такого функционала там нет, то либо запросить у авторов/владельцев добавить данный функционал либо оставить все как есть.
    Ответ написан
    4 комментария
  • Как реализовать real-time систему диалогов?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    WebSockets - крутая штука. Можно взять готовую библиотеку - например, там же есть готовые примеры, которые можно сразу использовать. Если возникнут какие вопросы по использованию - велкам в чат.
    Ответ написан
    Комментировать
  • Оптимизация большого числа картинок?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    В количестве элементов. Надо просто удалять старые элементы из DOM. Оставить элементов 30-50, не более. По мере прокрутки невидимые элементы удалять, а новые добавлять.
    Ответ написан
  • Какую библиотеку использовать для отрисовки графиков?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Если объем отображаемых данных небольшой(менее 100 точек), то можно использовать SVG библиотеки (я например использовал C3.js - очень юзабельная либа, оcнована на D3). Если же точек много - то лучше выбирать графики с отрисовкой в CANVAS.
    Ответ написан
    Комментировать
  • Алгоритм drag & drop builder?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    1. При клике по элементу создать новый элемент этого типа.
    2. Двигать его с курсором, пока зажата кнопка мыши
    3. При отпускании кнопки мыши проверить, в правильный ли контейнер был перенесен элемент и если правильный - разместить элемент в этом контейнере, иначе - удалить элемент.
    Ответ написан
    Комментировать
  • Как работает плагин?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Открываем консоль и видим:
    VM3144 plotly-latest.min.js:52 Uncaught TypeError: Cannot read property 'selectAll' of undefined
    Ответ написан
  • Как получить рабочее выражение?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    ([1,2,3]).draw()
    То же самое, что и:
    [1,2,3].draw()

    У круглых скобок самих по себе (т.е. без имени функции) логика точно такая же как в математике - задание приоритета при групповых операциях.

    Чтобы оно что-то делало, то в прототип массива добавляем нужную функцию:
    Array.prototype.draw = function(){ console.log(this) };

    Но так не рекомендуется делать: более правильно сделать свой конструктор, у которого в прототипе находится массив.
    Ответ написан
    Комментировать
  • Как сравнить два массива?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    var a1 = [ '1', '2', '3', '4', '5' ]
        , a2 = [ '1', '4', '7' ]
        , res
    ;
    
    res = a1.filter(function(v1){
        return !a2.find(function(v2){ return v2 === v1 });
    });
    Ответ написан
    Комментировать
  • Как сделать такое диалоговое окно?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    www.w3schools.com/jsref/met_win_prompt.asp
    prompt("Please enter your name", "Harry Potter");
    Либо сверстать, либо взять что-то готовое из популярных UI-наборов.
    Ответ написан
    Комментировать
  • Как обрабатывать перетаскивание пальцем картинки по экрану?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Вот примерно так (коффее скрипт правда, да скрол бесконечный, но ограничения ставятся легко):
    class bgViewer
    
        dn = (e) ->
            @isStop = false
            @sx = @lx = e.pageX or (e.originalEvent and e.originalEvent.touches and e.originalEvent.touches[0] and e.originalEvent.touches[0].pageX) or 0
            @sy = @ly = e.pageY or (e.originalEvent and e.originalEvent.touches and e.originalEvent.touches[0] and e.originalEvent.touches[0].pageY) or 0
            return false
    
        up = (e) ->
            @isStop = true
            return false
    
        move = (e) ->
            if @isStop then return
            x = e.pageX or (e.originalEvent and e.originalEvent.touches and e.originalEvent.touches[0] and e.originalEvent.touches[0].pageX) or 0
            y = e.pageY or (e.originalEvent and e.originalEvent.touches and e.originalEvent.touches[0] and e.originalEvent.touches[0].pageY) or 0
            dx = x - @lx
            dy = y - @ly
    
            if Math.abs(x-@sx) < @filter and Math.abs(y-@sy) < @filter
                return
    
            @lx = x
            @ly = y
    
            @x = (@x + dx) % @w
            @y = (@y + dy) % @h
            @cnt.css(
                'background-position': @x + 'px ' + @y + 'px'
            )
            return false
    
        free: ->
            @cnt.off( 'mousedown touchstart', @dnxt
            ).off( 'mouseup touchend', @upxt
            ).off( 'mousemove touchmove', @movext )
            return @
    
        url: (src) ->
            @src = src
            @img = new Image
            @img.src = src
            $( @img ).on( 'load', (e) =>
                @w = @img.width
                @h = @img.height
            )
            @cnt.css(
                'background-image': 'url(' + src + ')'
                'background-position': '0px 0px'
            )
            @x = 0
            @y = 0
            @lx = 0
            @ly = 0
            @sx = 0
            @sx = 0
            return @
    
        constructor: (@cnt, @src = '', @filter = 5) ->
            @cnt.css(
                'overflow': 'hidden'
                'background-repeat': 'repeat'
                'background-position': '0px 0px'
                'cursor': 'move'
            )
    
            @x = 0
            @y = 0
            @lx = 0
            @ly = 0
            @sx = 0
            @sx = 0
            @isStop = true
    
            t = @
    
            @dnxt = (e) -> dn.call t, e
            @upxt = (e) -> up.call t, e
            @movext = (e) -> move.call t, e
    
            @cnt.on( 'mousedown touchstart', @dnxt
            ).on( 'mouseup touchend', @upxt
            ).on( 'mousemove touchmove', @movext )
    
            @cnt[0].bgviewer = @
            @url @src


    Применять примерно так:
    <!DOCTYPE html><html>
    <head>
        <meta charset="utf-8">
        <script type="text/javascript" src="lib/jquery-3.1.0.min.js"></script>
        <script type="text/javascript" src="app/bgviewer.js"></script>
        <style>
            BODY {
                padding: 0;
                margin: 0;
                left: 0;
                top: 0;
                right: 0;
                bottom: 0;
                overflow: hidden;
                position: absolute;
            }
    
            .viewer {
                width: 100%;
                height: 100%;
                background-color: #434343;
            }
        </style>
    </head>
    <body>
        <div class="viewer" id="viewer"></div>
        <script type="text/javascript">
            $(function(){
                window.t2 = new bgViewer(
                    $('#viewer'),
                    'image.jpg',
                    10 // Filter motion less 10 px
                );
            });
        </script>
    </body>
    </html>
    Ответ написан
  • Как добавить переменную в массив?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    var meth = "action", data = [];
    function st(meth){
        data.push({
            'ecommerce': {
                [meth]: { 'products': ["product"] }
            }
        });
    }
    st(meth);

    Но данный синтаксис в старых JS движках не корректен.
    Ответ написан
    Комментировать
  • Дайте пару ссылок на популярные сборники ui компонентов?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Не совсем сборник, но модульный: https://getuikit.com/ - есть ядро с основными элементами и плюс есть дополнительные компоненты.
    Ответ написан
    Комментировать
  • Как написать проверку на существования свойства length в js?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    var t = Object.prototype.toString;
    function isArray (s) { return t.call(s) === '[object Array]'; };
    var x = [1,2,3];
    if( isArray(x) && x.length > 0 ){ console.log('x is array and length is', x.length)} else { console.log('x isnt array') }
    var x = {};
    if( isArray(x) && x.length > 0 ){ console.log('x is array and length is', x.length)} else { console.log('x isnt array') }
    Ответ написан
    Комментировать
  • Как продолжить таймер после перехода по страницам?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Куки, localstorage, АПИ на сервере. Сохранять в куки - вполне нормально, не костыль совсем.
    Ответ написан
    Комментировать
  • Как вывести даные об итерации each?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    $( "#sortable li" ).each(function(i){
        console.log("Index:", i);
    });
    Ответ написан
    Комментировать
  • Как сделать js-фильтрацию html-списка, построенного средствами jQuery?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    На самом деле тут ничего сверхсложного нет - реализуется за минуту:
    1) После генерации html-элементов создается массив из этих элементов;
    2) На кнопку фильтрации вешается следующая логика:
    Для каждого элемента в массиве: соответствует ли критериям поиска? да - сделать видимым, нет - скрыть элемент.
    И все.

    Пример:
    Ответ написан
    Комментировать
  • Почему fs модуль не создает папку?

    VoidVolker
    @VoidVolker Куратор тега JavaScript
    Dark side eye. А у нас печеньки! А у вас?
    Потому что createWrite stream - это именно создание потока для записи и не более того. И аналогично со всеми остальными функциями в модуле fs - если это не создание каталога, то функция и не будет создавать каталог. Поэтому, перед записью файла необходимо убедиться в наличии всех каталогов к этому файлу. Расширений к модулю fs полно, например: https://github.com/jprichardson/node-fs-extra - там есть функции для автоматического создания каталогов.
    Ответ написан
    Комментировать