Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как правильно вносить изменения в html, при помощи js ?

    AMar4enko
    @AMar4enko
    Потому что нужно throttling функции делать. Мне даже представить сложно, сколько раз у вас срабатывает эта функция и что с CPU происходит.
    Ответ написан
    1 комментарий
  • Gulp нужно постоянно устанавливать заново в новый проект или нет?

    AMar4enko
    @AMar4enko
    Нужно перенести gulpfile.js, package.json, после чего сделать npm install и все будет ок.
    Ответ написан
    4 комментария
  • Gulp как настроить что б он создавал и конкатенируемую версию и минифицируемую?

    AMar4enko
    @AMar4enko
    Вы бы таск показали. Два таска создавать незачем, можно в одном таске создавать и одну и другую.
    Ответ написан
    Комментировать
  • Как получить File или Blob object, зная только URL?

    AMar4enko
    @AMar4enko
    Вас в гугле забанили?
    stackoverflow.com/questions/11876175/how-to-get-a-...
    Ответ написан
    Комментировать
  • Как найти круг на изображении с помощью js?

    AMar4enko
    @AMar4enko
    Ну если прямо руками, то можно можно так (только что придумал):
    - начиная с одного из углов берем пиксель, если он белого цвета, то выкидываем, берем следующий.
    - если он не белого цвета, то находим ближайший пиксель этого же цвета слева и справа от него, получаем ширину линии
    - встаем на середину линии и от нее идем вверх и вниз, пока и там и там не дойдем до белого цвета, каждый раз определяя ширину линии по этой фигуре
    - у круга внизу и вверху ширина линии маленькая, а посередине большая
    - у квадрата ширина линий постоянная
    - у треугольника с одной стороны большая, с другой маленькая
    Ответ написан
    Комментировать
  • Отличия service от factory?

    AMar4enko
    @AMar4enko
    Вот хорошая статья. habrahabr.ru/post/190342
    Ответ написан
    Комментировать
  • Как скормить Angular динамические данные из Ajax.jquery?

    AMar4enko
    @AMar4enko
    Это что касается компиляции и использования шаблонов "на лету"
    codepen.io/AMar4enko/pen/azvEXw

    В остальном много вопросов по архитектуре например, что делает $scope.translate в контроллере, зачем в целом нужен контроллер language и.т.д.
    Ответ написан
    Комментировать
  • Как выводить записи из таблицы БД MySQL без перезагрузки страницы?

    AMar4enko
    @AMar4enko
    Если принять за "PHP" его классическое использование в стеке веб-сервера, то "правильно" - никак.
    Правильная реализация - вебсокеты или server-sent events. Все остальное это полный ахтунг по одной простой причине - при более-менее реальных нагрузках нужно минимизировать затраты (CPU и память) на осблуживание одного соединения. В случае PHP это невозможно.
    Обычно такие вещи реализуются на асинхронных фреймворках. Именно поэтому сейчас realtime-web так бурно развивается с приходом node.js.
    Можете попробовать на phpDaemon что-нибудь наваять.
    Ответ написан
    Комментировать
  • У меня не работает парочка вещей на angular, как пофиксить?

    AMar4enko
    @AMar4enko
    Насчет того, что у вас при нажатии "Заказать" добавляется в массив, но не пересчитывается сумма заказа:
    У вас mainController объявлен на body, а потом объявлен в my-directive.

    В начале mainController вы в скоупе создаете новую ссылку на массив orderList, totalPrice() вызывается на скоупе второго экземпляра mainController, в то время как добавление товара происходит в массив, объявленный в скоупе первого экземпляра mainController, а это два разных массива.

    А убрать из директивы объявление контроллера вы не можете, потому что для директивы запрашиваете изолированный скоуп, в который само собой функция totalPrice() из скоупа, объявленного на body, не попадает.

    Вам надо основательно разобраться сначала, как работаю скоупы в AngularJS, после чего узнать про controller as.

    P.S. По архитектуре приложения ничего говорить не буду, не просили.

    Вы столкнулись с проблемой из-за того, что захардкодили в контроллерах бизнес-логику. Это очевидный архитектурный недостаток. После его устранения у вас все начнет работать как нужно. Вам нужно вынести работу с корзиной в отдельный сервис:
    module.service('Cart', function($rootScope, localStorageService){
        var 
            currencies = {rub: 10800, usd: 1}, 
            cartTotal = 0, 
            cartItems = localStorageService.get('zakaz') || [];
    
        function updateCartTotal(){
            var _total = 0;
            angular.forEach(cartItems, function(item){
                _total += item.price;
            });
            cartTotal  = _total;   
        }
    
        this.getTotal = function(currency){
            var currency = currency || 'usd';
            return cartTotal * (currencies[currency] || 1);  
        }
        this.addItem = function(item){
            cartItems.push(item);
            updateCartTotal();
            $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});       
        }
        this.removeItem = function(item){
            var idx = cartItems.indexOf(item);
            if(idx > -1){
                cartItems.splice(idx,1);
                updateCartTotal();
                $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});       
            }
        }
        this.isItemAddedAlready = function(item){
            return cartItems.indexOf(item) > -1; 
        };
        this.clear = function(){
            cartItems.length = 0;
            cartTotal = 0;
            $rootScope.$broadcast('cart:updated', {cartSize: cartItems.length});   
        }
        this.getItems = function(){
            return cartItems;
        }
    });

    Замечание: сейчас для поиска элемента в массиве ипользуется indexOf.
    Он будет работать только когда корзина будет инициализироваться пустым массивом, потому что в этом случае при добавлении и удалении элементов будут использоваться одни и те же ссылки и равенство ссылок будет прокатывать. Для нормальной работы нужно либо писать костыль для поиска по ID, либо использовать underscore или lodash.

    Теперь вы в контроллеры подключаете этот сервис через DI и везде, где нужно, используете его методы.
    Для того, чтобы обновлять сумму и размер корзины делаете:
    $scope.$on('cart:updated', function(event, info){
        $scope.cartTotal = Cart.getTotal(currency);
        $scope.cartSize = info.cartSize;
    });

    Мы бы могли сохранить ссылку на функцию сервиса у себя в контроллере и в шаблоне вызывать ее, типа {{getTotal(currency)}}, но так делать не стоит, потому что это лишний нагруженный watcher. Сейчас вы его, конечно, не почувствуете, но помнить о таких моментах надо всегда. Поэтому мы подписались на событие корзины и когда корзина изменяется, вытаскиваем нужную информацию.
    Перепишите код с использованием сервиса, и увидите как он изменится в лучшую сторону. Ну а про удобство автоматизированного тестирования пока, думаю, смысла нет.
    Ответ написан
  • Как определить название формы с которой был сделан клик?

    AMar4enko
    @AMar4enko
    $('.selector-for-multiple-forms').on('submit', function(event){
        var jqForm = $(this), msg = jqForm.serialize();
        event.preventDefault();
        ... 
    });

    Каждая из форм, отправка которых должна обрабатываться таким образом, должна иметь класс .selector-for-multiple-forms или можете придумать любой удобный вам селектор.
    Ответ написан
    Комментировать
  • JQuery: почему я не могу передать jquery объект в функцию?

    AMar4enko
    @AMar4enko
    А что конкретно вы от последнего куска кода ожидаете? Давайте разберем, как он будет выполняться:
    - ! Вычислить значение функции showOnly для переданного buttonWeb (будет undefined)
    - Используя значение buttonWeb как dom-селектор, выбрать все элементы, ему удовлетворяющие
    - ! Для каждого из полученных элементов добавить подписку на событие click, с функцией-обработчиком, которая была вычислена как результат выполнения функции showOnly (а она у нас undefined)

    Вам в on('click' нужно передать значение типа "функция", а вы передаете undefined.
    Добиться желаемого поведения можно как-то так (исправил):
    showOnly = function(showSelector, hideSelector){
        return function(){  
            var cat = $(selector);        
            $(hideSelector).hide();
            cat.show('fast', function(){
                cat.appendTo('.works-flow');
            });
        };    
    };
    
    $(buttonWeb).on('click', showOnly('.category-web', '.work-image-link'));

    В результате выполнения showOnly мы получаем новую функцию, привязанную к переданным в showOnly селекторам, которую используем в качестве обработчика.
    P.S. Посмотрел ваш код.
    Ответ написан
  • Как ловить Json полученный от сервера с имеющимся api?

    AMar4enko
    @AMar4enko
    А вам какого уровня сложности?
    Это можно сделать с помощью:
    - VanillaJS
    - jQuery
    - Ember
    - AngularJS
    ...тут еще с десяток разнообразных поделок.

    У каждого из способов свои плюсы и минусы, свой порог вхождения.
    Ответ написан
  • Как избежать окна авторизации при ajax запросе?

    AMar4enko
    @AMar4enko
    Добавьте в запрос заголовок X-Requested-With: XMLHttpRequest
    Ответ написан
    Комментировать
  • Как сделать такой ролик на фоне?

    AMar4enko
    @AMar4enko
    Single Page Javascript Application.
    Ответ написан
    Комментировать
  • Актуально ли генерировать HTML-код при написании плагина под jQuery?

    AMar4enko
    @AMar4enko
    Можно использовать любую доступную систему фронтенд-сборки, чтобы собирать js-файл из js-файла и html-файла разметки. В целом плагины jquery не совсем под вашу идеологию подходят, у вас скорее что-то наподобие jquery ui widget.
    Ответ написан
  • Можно ли через JavaScript узнать c wifi или мобильного интернета зашел на сайт посетитель?

    AMar4enko
    @AMar4enko
    Можно отправить пустой запрос на сервер, а там проверить IP-адрес клиента на принадлежность пулу IP-адресов сотовых операторов, пулы известны.
    Ответ написан
    Комментировать
  • Как происходит обмен внешними данными в Cordova/Phonegap?

    AMar4enko
    @AMar4enko
    Не совсем очевидная штука, но когда открывается index.html html5 приложения в Cordova, он открывается по file:// протоколу - в этом случае политики кросс-доменных запросов не применяются.
    Поэтому то, что не работает из-за CORS у вас в браузере в процессе отладки, вполне будет работать на устройстве.
    Ответ написан
    Комментировать
  • Искусственное создание touch event на мобильных устройствах?

    AMar4enko
    @AMar4enko
    Способа обойти это ограничение нет.
    Ответ написан
    Комментировать
  • Как обеспечить корректную работу $ajax + turbolinks Rails 4.1?

    AMar4enko
    @AMar4enko
    Ну ешкин кот, понятно же, что турболинки херовы каждый раз вытаскивают вместе с хэтэмээль ваш жабоскрипт и jquery его исполнительно запускает. А раз страница не обновляется, то и интервалы ваши никуда не деваются и накапливаются.
    Вот тут куча всяких разных событий, которыми турболинки стрелят - я советую вам на page:load повесить создание вашего многострадального интервала, а на page:fetch его очистку.
    setInterval возвращает id, по которому его можно удалить. Это я так. на всякий случай.
    Ответ написан
    3 комментария