Тег: java

Как использовать SVG и не забывать про старые браузеры

Сейчас повсеместно ставят всякие Retina и другие экраны с большой плотностью пикселей. Обычные картинки смотрятся архаично. Можно конечно ставить изображения увеличенные в два раза, а можно просто ипользовать векторные картинки формата SVG. Но, несмотря на 2014 год, иногда все еще можно встретить компьютеры, в которых утсановленны браузеры, неподдерживающие эту технологию. По этой причине многие ищут способы использования SVG, но чтобы IE тоже мог что-то показать вместо белого квадратика.

На самом деле все легко. Если SVG используется в качестве фонового изображения, то можно делать вот так:

.block-with-svg {
    background-image: url(/path/to/image.png);
    background-image: url(/path/to/image.svg), none;
}

А если вы просто вставили картинку, то:

<img src="/path/to/image.svg" onerror="this.src='/path/to/image.png'" />

Работает везде.

02 июня 2014
3.4 тыс.
1 мин

Мобильные устройства и задержка в 300 милисекунд

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

При разработке таких веб-приложений часто возникает множество вопросов. Один из самых важных – задержка между нажатием на какую-либо ссылку и срабатыванием события click. И чем больше устройств выходит на рынок, тем более острым становится этот вопрос. Если для Android и iOS просто необходимо было обрабатывать события на touchstart, touchmove, touchend, то с выходом новой Windows Mobile появились MSPointer events.

В данный момент существует большое количество решений этой проблемы. Однако Илья pukhalski Пухальский, с моей посильной помощью (очень маленькой), написал библиотечку tap, которая просто добавляет к стандартным событиям в JavaScript новое событие tap.

Теперь, подключив эту библиотеку, можно вешать обработчики на событие tap и все будет работать быстро и красиво.

Вот пример для Vanilla JS:

document.getElementById('any-element').addEventListener('tap', function (e) {
    // All the magic happens here
});

А вот для Jquery:

$('#any-element').on('tap', function (e) {
    // All the magic happens here
});

Посмотреть и скачать можно здесь: github.com/pukhalski/tap. Там же примеры для Zepto, Dojo, YUI, ExtJS.

20 мая 2014
3.4 тыс.
1 мин

JavaScript: Java String.hashCode()

Как-то раз столкнулся с необходимостью сгенерировать в Javascript хэш из строки. Да не просто сгенерировать, а так, что бы он полностью совпал с хэшем, сделанным в Java. Полазил в интернете и нашел.

String.prototype.hashCode = function() {
    var hash = 0;
try {

    if (this.length == 0) return hash;

    for (i = 0; i < this.length; i++) {
        char = this.charCodeAt(i);
        hash = ((hash << 5) - hash) + char;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;

} catch (e) {
    throw new Error('hashCode: ' + e);
}

};

Ссылка в gists.

05 марта 2014
6.1 тыс.
20 сек

Поиск по ключу и значению в JavaScript

Часто возникает необходимость в JavaScript найти данные в массиве или объекте по ключу и значению. Стандартной функции или метода к сожалению не существует. Ниже пример такой функции, в которую нужно передать параметр arr (массив или объект) и keyObj (ключ и значение, например {id:10}).

05 февраля 2014
11.2 тыс.
14 сек

Глобальные переменные в JavaScript

Всем давно и доподлинно известно, что использовать глобальные переменные в JavaScript не принято. Почему? Существует масса причин, все они, конечно же, глупы, но давайте придерживаться такой теории.

Однако иногда возникает необходимость иметь и пользовать глобальную переменную. Но как тогда быть? А если вдруг мы пишем для Node.js, там ведь нету глобального объекта window, там root? А если я хочу использовать свой код и во фронтенде и на сервере?

За сим предлагаю такое решение, которое знатно растиражированно, но никто о нем никогда не помнит.

var global = (function () {
    return this || (1, eval)('this');
}());

Теперь у нас есть глобальный объект global, который обладает всеми свойствами window / root. Элегантное и просто решение.

Придумал не я, украл вот тут.

24 декабря 2013
4.3 тыс.
1 мин

Кнопка удаления с подтверждением

Однажды один мой товарищ попросил сделать для одного его проекта кнопку удаления, которая содержала бы внутри себя подтверждение. Т.е. как это сделано обычно? Нажимаешь удалить - выскакивает окно с вопросом "Вы уверены, что ходите удалить то-то и то-то?" - нажимаешь "Да", после чего удаляется то, что надо. Так вот, он хотел чтобы нажимаешь "Удалить", внутри кнопки меняется текст на "Вы уверены?", нажимаешь еще раз и происходит удаление.

Идея показалась мне интересной, и я решил поделиться способом простой реализации.

17 декабря 2013
7.9 тыс.
2 мин

Четыре лучших редактора для веб-разработчика

В силу разных причин, для работы я пользуюсь Mac OS. К счастью, разнообразие редакторов кода для этой системы позволяет выбрать что-то действительно удобное именно для меня. Попробовав многие из представленных на рынке программ, я составил свой рейтинг из четырех, который вам и представлю.

Text mate

Первый из лучших, прототип для популярного Sublime Text. Вторая версия Textmate стала бесплатной и при этом не потеряла своей функциональности. Редактор не кроссплатформенный, а написан именно для использования в Mac OS, поэтому очень маленький и быстрый. Много плагинов и возможностей. Именно его я использую каждый день.

Sublime Text

Наверное самый популярный сегодня кроссплатформенный редактор. Для него написаны сотни плагинов и сниппетов. Редактор платный - $70, но при этом его бесплатная версия ни в чем не уступает платной. Есть, правда, одна особенность, периодически при сохранении выскакивает окошко с предложением купить редактор. Достаточно просто закрыть это окно и можно успешно работать дальше. Неоспоримым преимуществом этого редактора является возможность выделять сразу много разрозненных кусков кода (мультиселект) и редактировать их одновременно.

Chocolat

Молодой, но многообесчающий редактор. Написан только для Mac OS. Стоимость - $49. Бесплатно можно пользоваться 14 дней. Количество плагинов пока не велико, но сообщество растет и развивается. Так же имеет в своем арсенале возможность мультиселекта.

Brackets

Бесплатный редактор от Adobe с открытым исходным кодом. Написан под Windows, Mac OS, Linux. Интерес вызывает то, что написан он на JavaScript. Это правда обуславливает и его недостатки: медленную работу и большой размер. Есть у него и ряд преимуществ перед другими редакторами:

  • Live HTML Development - сразу после сохранения изменений результат отображается в браузере (поддерживается только Chrome)
  • Быстрое редактирование - css можно редактировать прямо в html-файлах, не открывая файлы со стилями.
  • Adobe Edge - если вы купите подписку у Adobe, то Live HTML Development будет доступен не только в браузере компьютера, но и на различных мобильных устройствах.

Никаких выводов делать не стану, каждый сам волен выбирать, что использовать для работы. Мне кажется, что описанные мной программы все-таки лучшие для Mac OS на сегодняшний день. И да, я не учитывал здесь огромные и громоздкие комбайны вроде WebStorm. Все-таки они слишком многофункциональны для html/css/javascript разработки.

13 декабря 2013
5.4 тыс.
3 мин

Windows 1.01 и Windows 3.11 в браузере

Если вы в силу разных причин не застали времена 286-х компьютеров, DOS-a и ранних версий Windows, то у вас есть несколько вариантов их увидеть:

  1. Раздобыть немного старого компьютерного железа и увсе установить
  2. Проследовать вот по этой ссылке, чтобы увидеть как выглядела Windows 3.11, или вот по этой, чтобы увидеть настоящую Windows 1.01, запущенную в браузере. Ничего сверхинтересного вы для себя не найдете, но для общего образования очень полезно.
03 ноября 2013
4 тыс.
20 сек

Моя презентация «Yeoman: building an infrastructure for your projects»

27 октября 2013
2.9 тыс.
1 сек

Функция uniqid в JavaScript

В PHP есть шикарная функция uniqid. Она позволяет сгенерировать случайный идентификатор состоящий из цифр и букв, основанный на текущем времени. Выглядит он примерно вот так 526439af76c56.

Я очень часто пользуюсь ей (функцией), когда делаю что-то на ПХП. Конечно же мне очень хватало этой функции в JavaScript, поэтому я поискал в интернете, нашел один неплохой вариант, немного его подправил и вуаля:

(function () {
    this.uniqid = function (pr, en) {
        var pr = pr || '', en = en || false, result, us;
    this.seed = function (s, w) {
        s = parseInt(s, 10).toString(16);
        return w < s.length ? s.slice(s.length - w) : 
                  (w > s.length) ? new Array(1 + (w - s.length)).join('0') + s : s;
    };

    result = pr + this.seed(parseInt(new Date().getTime() / 1000, 10), 8) 
                + this.seed(Math.floor(Math.random() * 0x75bcd15) + 1, 5);

    if (en) result += (Math.random() * 10).toFixed(8).toString();

    return result;
};

})();

Использовать можно:

  • так uniquid() - результат 52643b81917b3
  • или вот так uniqid('prefix_') - результат prefix_52643bb682821
  • и даже вот так uniqid('prefix_', true) - результат prefix_52643bdf3b1fb7.38568327

Пользуйтесь на здоровье.

Тут ссылка на Gist.

24 октября 2013
5.8 тыс.
1 мин