Ответы пользователя по тегу HTML
  • Почему не срабатывает обновление данных в AngularJS?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Ангулар ничего не знает о клике, повешенном через метод .on() — поэтому после клика Ангулару нужно принудительно сообщить об рефреше скоупа:

    a.on('click', function(e) {				
        var page = e.target.text;
    
        $scope.setPage(page);
    
        // обновляем скоуп
        $scope.$apply();
    });


    По поводу вообще всего в общем:

    В контроллере должна быть только логика — забудьте про жиКвери, забудьте про селекторы, выкиньте из головы жиКвери-подход — контроллеры ничего не знают о DOM-элементах, в контроллерах только логика.

    Прятать/показывать элементы нужно не по-жикверевски, через метод .css() (работая с DOM), а по-ангуларовски, через ng-show (работя с логикой).

    Задавать классы нужно не по-жикверевски, через метод .addClass() (работая с DOM), а по-ангуларовски, через ng-class (работя с логикой) (причем, ты задаешь классы .show/.hide — тут не классы нужны, тут используй ng-show, ведь ты же показываешь/прячешь).

    Вставлять элементы в DOM не нужно, это делается прямо в ХТМЛе, а не в контроллере:
    <ul class="pagination">
        <li ng-repeat="page in pages">{{page}}</li>
    </ul>


    Вешать события на элементы нужно не по-жикверевски, а прямо в ХТМЛе:
    <ul class="pagination">
        <li ng-repeat="page in pages" ng-click="openPage(page)">{{page}}</li>
    </ul>


    Да и вообще, там должна быть обычная ссылка, а не событие клика:
    <ul class="pagination">
        <li ng-repeat="page in pages">
            <a ng-href="/page/{{page}}">{{page}}</a>
        </li>
    </ul>


    И самое главное — удалите жиКвери. Он не нужен вообще-привообще, выкиньте из мозга саму концепцию жиКвери, выкиньте способ размышления на жиКвери — Ангулар работает совершенно по-другому.
    Ответ написан
  • Покритикуйте верстку, какие в ней есть ошибки?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    «пока вручную, без бутстрапа» — с чего вы взяли, что адаптивная верстка, да и верстка вообще, делается обязательно с Бутстрапом? Это совершенно ненужный цсс-фреймворк, который почему-то все пихают везде.
    Ответ написан
    1 комментарий
  • Зачем нужны комментарии после тега script?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Очень странно, что вы встречаете в коде такое — это давным-давно устарело и не факт, что вообще когда-либо работало. Лично я уже много лет занимаюсь фронтенд-разработкой и практически никогда не видел в коде такие вот штуки и сам вообще никогда-приникогда их не использовал — проблем никогда не было, никакой код не выводился на страницу даже в самых допотопных браузерах (начинал с IE6).
    Ответ написан
    Комментировать
  • Какое событие происходит при замолкании HTML5 audio плеера при плохом интернете????

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Что, реально, Максим Доши?

    Вот эвенты:

    var events = [
        'emptied',
        'loadedmetadata',
        'loadeddata',
        'canplay',
        'canplaythrough',
        'playing',
        'ended',
        'waiting',
        'ended',
        'durationchange',
        'timeupdate',
        'play',
        'pause',
        'ratechange',
        'volumechange'
    ];


    Вешаете их на плеер:

    _.each(events, function(type) {
        player.addEventListener(type, onEvent, false);
    });
    
    function onEvent(e) {
        console.log(e.type);
    }


    А потом имитируете плохое подключение (погуглите) и смотрите, какие события вызываются.
    Ответ написан
  • Где найти пример подбных «карточек»?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Как же бесят сайты с автоподгрузкой при прокручивании. Умники, создатели/дизайнеры сайта, вы хоть раз пробовали своим произведением пользоваться? — попробуйте прокрутить до футера, чурбаны.
    Ответ написан
    2 комментария
  • Как использовать в angular localstorage?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    AngularJS и LocalStorage API никак не связаны, вообще-привообще не связаны, это абсолютно разные вещи. LocalStorage это API браузера, вызовы методов которого доступны на языке программирования. AngularJS это Яваскрипт-фреймворк. Язык программирования называется не Angular, а Javascript. Поэтому, чтобы использовать LocalStorage, нужно просто брать и использовать, это обычный Яваскрипт, к Ангулару это не имеет совершенно никакого отношения.
    Ответ написан
    5 комментариев
  • Актуален ли сейчас jQuery?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Как только вы будете использовать Ангулар (или подобный фреймворк), то жиКвери вам вообще не будет нужен совсем (как, совсем? да, совсем-присовсем), ни для слайдеров, ни для любых других интерактивных штук, ни для работы с DOM, ни для чего вообще.

    Актуален жиКвери для совсем уж простеньких корпоративных говносайтов или лендинг-пейджей, которые нужно сделать как можно скорее, так сказать, на от****сь, где нужно быстренько тупо прикрутить какие-нибудь готовые жиКвери-плагинчики и сдать тупому заказчику. А так, как таких сайтов тьма и они будут всегда, то и актуальность жиКвери будет поддерживаться еще дооолгое время, это инфа 100%.
    Ответ написан
    1 комментарий
  • Возможно ли сделать квадратный блок авто ширины средствами HTML+CSS?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Гуглите выражение css padding hack, тема стара как мир — это как раз то, как сделать высоту блока пропорциональной ширине блока. Вот песочница, меняйте ширину фрейма, квадратик будет пропорционально менять свои размеры.
    Ответ написан
    1 комментарий
  • Блок с текстом при резиновой верстке. Как задать высоту для ограничения текста?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Гуглите выражение css padding hack — это как раз то, как сделать высоту блока пропорциональной ширине блока. Вот песочница, я сделал блок с текстом в 2 раза меньше, чем его ширина. Еще для красоты нужно сделать внизу блока градиентную от белого к прозрачному подложку, чтобы текст, который не влезает в блок, красиво пропадал. Ну и еще нужно будет играться с max-width или max-height, иначе проценты всегда будут растягивать блок по высоте.
    Ответ написан
  • Какой существует плагин для создания эффекта перетаскивания страниц мышкой?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Как только люди видят прикольненький эффектик, так тут же ищут жиКвери-плагин и хотят поставить себе на сайт :) Это не жиКвери-плагин, это кастомный сложный скрипт. Самое близкое по функционалу, это слайдер, где можно мышкой перелистывать слайды.
    Ответ написан
    Комментировать
  • Как лучше организовать динамическое обновление блоков HTML на JS?

    mudrick
    @mudrick
    Máximo progreso hemos alcanzado en minimo seso.
    Только лишь для одного виджета корзины Ангулар подключать конечно же не стоит :)

    На Ангуларе это делается следующим образом — есть директива корзины (виджет) и есть сервис корзины. Добавление товаров в корзину идет через сервис, а директива слушает изменения сервиса и выводит у себя обновленную инфу.

    Вот Директива:
    angular.module('app').directive('shoppingCartWidget', function(shoppingCartService) {
        return {
            restrict: 'E',
            replace: true,
            scope: {},
            templateUrl: 'shopping-cart.html',
            link: function(scope, element, attributes) {
                scope.items = [];
    
                // слушаем изменения в корзине
                scope.$watch(shoppingCartService.getItems, function(items) {
                    scope.items = items;
                });
            }
        }
    });


    Вот сервис:
    angular.module('app').directive('shoppingCartService', function(_) {
        var items = [];
    
        function add(itemData) {
            items.push(itemData);
        }
    
        function remove(itemID) {
            items = _.reject(items, {id: itemID});
        }
    
        function clear() {
            items = [];
        }
    
        function getItems() {
            return items;
        }
    
        return {
            add: add,
            remove: remove,
            clear: clear,
            getItems: getItems
        }
    });


    Вот контроллер:
    angular.module('app').controller('myController', function(shoppingCartService) {
    
        // ну, тут будет не массив, а $resource, например
    
        $scope.items = [
            {
                id: 1,
                name: 'Клавиатура',
                price: 150
            },
            {
                id: 2,
                name: 'Кофе',
                price: 50
            }
        ];
    
        $scope.addToCart = addToCart;
    
        function addToCart(itemData) {
            shoppingCartService.add(itemData);
        }
    
    });


    Вот вьюха списка товаров:
    <ul>
        <li ng-repeat="item in items">
            <span>{{item.name}}</span>
            <button ng-click="addToCart(item)">Добавить в корзину</button>
        </li>
    </ul>
    Ответ написан
    5 комментариев