Обновить
151.3

JavaScript *

Прототипно-ориентированный язык программирования

Сначала показывать
Порог рейтинга
Уровень сложности

Маньячная минимизация (в погоне за байтом)

Время на прочтение8 мин
Охват и читатели8.1K
Hello World,

Этот топик о том, каким образом можно предварительно зарефакторить код так, чтобы улучшить его минимизацию. Недавно я перед релизом минимизировал библиотеку Helios Kernel (о которой написал позавчера). Исходник библиотеки весит 28112 байт, в нём щедрые комментарии, и поэтому он с пол пинка ужимается YUI компрессором до 7083 байт. Не то что бы мне показалось, что 7 килобайт — слишком жирно. Но просто, посмотрев своими глазами на минимизированный код, я смог увидеть кучу мест, где можно было бы сэкономить ещё:



Посмотрим, что можно сделать с кодом, чтобы превратить 7083 байт в 4009 3937.
Читать дальше →

Helios Kernel (удобный include в Javascript)

Время на прочтение4 мин
Охват и читатели7.2K
Hello World,

Всё начилось с простой идеи: мне захотелось, чтоб я мог в шапке скрипта написать что-то вроде

include( "path/to/someLibrary.js" );

а ниже использовать объекты, объявленные в скрипте someLibrary.js. Так появилась библиотека Helios Kernel.

Читать дальше →

Область видимости в JavaScript и «поднятие» переменных и объявлений функций

Время на прочтение6 мин
Охват и читатели160K
Вы знаете, какое значение выведет этот код на JavaScript?
var foo = 1; 
function bar() { 
    if (!foo) { 
        var foo = 10; 
    } 
    alert(foo); 
} 
bar();

Читать дальше →

Keymaster.js: простая микро-библиотека для «горячих клавиш»

Время на прочтение1 мин
Охват и читатели7.2K
На guthub'е появилась библиотека keymaster.js, с помощью которой можно добавить клавиатурные сокращения (shortkuts) на любую страничку. Конечно, для тех же целей предназначен модуль jQuery Hotkeys, но у keymaster.js есть свои преимущества: эта библиотека не имеет никаких зависимостей, она очень легковесная (всего 60 строчек кода) и лишена известных багов jQuery Hotkeys. В общем, определённо полезная вещь.

В ближайшее время для keymaster.js добавят ещё селектор INPUT / SELECT / TEXTAREA, это тоже будет полезное дополнение.
Пример скрипта

SunCalc — JavaScript-библиотека для вычисления положения солнца и солнечных фаз

Время на прочтение3 мин
Охват и читатели15K
SunCalc

Больше года назад я представил вашему вниманию свой проект SunCalc, позволяющий удобно изучать траектории солнца и фазы солнечного света (закат, рассвет, различные виды сумерек и т.д.) в течении заданного дня и в заданном местоположении.

Сейчас же я решил выпустить код, выполняющий непосредственное вычисление этих значений, в виде отдельной библиотеки с открытым исходным кодом, и опубликовать ее вместе с примерами и документацией на GitHub: github.com/mourner/suncalc

Библиотека написана на основе формул из статьи про положение солнца на сайте Astronomy Answers, опубликована под лицензией BSD, занимает ~1.5 кб, соответствует строгим стандартам JSLint и работает не только в браузере, но и на различных серверных платформах, таких, как Node.js.

Читать дальше →

Backbone.js для «чайников»

Время на прочтение13 мин
Охват и читатели291K
Backbone.js для чайников
Как то поздним вечерком мне пришла мысль изучить Backbone.js и привязать его к уже написанному на jQuery сервису. Сервис уже серьёзно расширился и меня достало это нагромождение обработчиков кликов, запросов и логики. Поэтому, я как усердный школьник полез в официальную документацию. Но либо я тупой, либо мой английский меня подкачал, либо то и другое вместе, но я не черта не понял. Я прочитал уже второй раз, внимательно, и для особо одарённых мест использовал google translate. Прочитал также и пример ToDo List. Всё показалось понятно, ровно до той поры пока я не стал писать. После чего я взял всё что нашел по этой библиотеке, как на английском так и переводы. Прочтя кипу документации я решил, что сейчас вроде всё понял. Я напрягся, но… Не вышел каменный цветок у мастера Данилы, т.е. вышло, но это явно был не цветок, и камень как то неправильно пах. Тогда, как прилежный ученик, я решил написать «Hello, KittyWorld» с нуля. Попутно комментируя и сохраняя шаги в hg, у меня получилось введение в backbone.js framework для таких как я, особо одарённых.
Данные 7 шагов с комментариями.

Codecademy: 200 тыс. юзеров, 2,1 млн уроков за первые 72 часа работы

Время на прочтение1 мин
Охват и читатели2.7K
Невероятный успех продемонстрировал стартап Codecademy, который обучает новичков программированию на JavaScript с помощью бесплатных интерактивных уроков. Уроки осуществляются в приложении с простым и интуитивно понятным интерфейсом. Ещё одна особенность проекта — регистрация на сайте не требуется, пока вы не закончите парочку первых уроков.

В первые три дня сайт привлёк 200+ тыс. активных пользователей (считаются те, кто зашёл на сайт и запустил приложение), количество законченных уроков составило ≈2,1 млн, пишет TechCrunch.

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

Немного о том, как JavaScript include JavaScript

Время на прочтение6 мин
Охват и читатели7.8K
Здравствуйте, Друзья.

Всё новое — хорошо забытое старое!
Речь пойдёт НЕ О HTML/JavaScript, а только о JavaScript!
Искал эту тему на Хабре, но не нашёл…

Работаю системным администратором в своей компании (домен windows) и поэтому часто приходится писать различные скрипты. За время работы была сделана библиотека функций (от .prototype, до WMI), которые вечно приходилось таскать за собою из файла в файл, что очень напрягает и утяжеляет код. Очень неприятно, когда начинаются модификации библиотечных функций (так же написанных на JavaScript). Вот тогда приходится искать где эта функция уже использовалась? Процесс поиска — утомительный, да ещё и отладкой нескольких файлов попахивает. Вот тогда и всплыло в моей памяти, что несколько лет назад читал где-то на форуме (уже за давностью лет и забылось на каком), что есть возможность делать такие «include»
Читать дальше →

5 полезных приемов

Время на прочтение3 мин
Охват и читатели7.3K
Эти маленькие куски кода я насобирал за весь свой стаж JavaScript-программирования. Они должны серьезно облегчить жизнь Web-разработчика, и научить решать проблемы проще, не прикручивая тяжеловесные JavaScript-библиотеки. Не спорю, иногда они могут оказаться весьма полезными, но подгружать JQuery для создания таймера — это, по-моему, дикость…

Читать дальше →

Введение в Wacom Javascript API

Время на прочтение3 мин
Охват и читатели3.6K
image

Wacom Javascript API позволяет приложению получить разные интересные параметры текущего состояния планшета. Например, силу нажатия или координаты ручки относительно планшета. А так же статические данные, такие как версия плагина или модель планшета.

В данном Хабратопике я покажу, как работает данный API, на примере HTML5 Canvas «рисовалки».

Читать дальше →

CBS или упрощенный вид стилизирования и написания скриптов в ваших проектах

Время на прочтение4 мин
Охват и читатели1.3K

Вступление



Привет хабровчане,

Вашему вниманию хотел бы предоставить небольшую, но полезную функцию которая:
  • Сделает работу верстальщика немного проще и чище
  • Упростит выборку элементов на странице через популярные платформы, аля jQuery


Смысл функции в том, что бы вместе с загрузкой страницы/после неё определить важные параметры клиента, такие как:
Браузер, версия браузера, О.С, движек браузера и.т.п
И разместить их в html тэг вашей страницы.

Дальше — больше. Читаем?

Читать дальше →

Events bubbling и events capturing

Время на прочтение5 мин
Охват и читатели65K
intro
Представьте, что на странице есть два блока, и один вложен в другой, как это показано на рисунке. В разметке страницы это выглядит так:
   <div id="block_outer">
      <div id="block_inner"></div>
   </div>

А теперь представьте, что к блоку #block_outer привязано событие onClickOuter, а к блоку #block_inner, соответственно, событие onClickInner. И ответьте на вопрос, как сделать так, чтобы при клике на блок #block_inner, событие onClickOuter не вызывалось? И будет ли оно вообще вызвано? И если будет, то в каком порядке события будут вызываться? И знаете ли вы, как работает метод jQuery.live или подобные в других библиотеках (events delegation в ExtJS, например)?
Если я хоть немного заинтересовал, добро пожаловать под кат.

Ещё один физический движок на JavaScript

Время на прочтение1 мин
Охват и читатели5.7K
На Google Code появился ещё один порт известного физического движка Box2D на JS — box2dweb (по ссылке есть демо). Автор говорит, что уже существует портированная версия Box2dJs, но она давно не обновлялась, так что приходится импортировать большое количество JS-библиотек в каждый проект.

Кроме двух упомянутых, на сегодня список библиотек физики на JavaScript выглядит так:

github.com/thinkpixellab/box2d — обработанный компилятором Closure Compiler порт Box2D на JS
code.google.com/p/bulletjs — порт фрагментов Java-библиотеки JBullet (http://jbullet.advel.cz/)
github.com/supereggbert/JigLibJS — порт JigLib на JS
github.com/hapticdata/toxiclibsjs — порт Toxiclibs VerletPhysics на JS
github.com/kripken/ammo.js — порт Bullet на JS

Ближайшие события

Введение в SproutCore часть вторая

Время на прочтение4 мин
Охват и читатели684
В первой части руководства по SproutCore рассказывалось о создании простого приложения.
Пришло время углубить знания и разобраться с Моделями в SproutCore.

После прочтения данного руководства вы сможете:

  • Описывать модели с помощью SC.Record.
  • Управлять моделями с помощью SC.Store.
  • Загружать начальные данные в хранилище.
  • Посылать запросы к хранилищу с помощью SC.Query.

Читать дальше →

Page Visibility API и Visibility.js

Время на прочтение7 мин
Охват и читатели22K
Кот Шрёдингера

Page Visibility API — новое API в JavaScript, которое позволяет узнать, видит ли пользователь ваш сайт или же он, например, открыл другой таб.

Каким образом это API может сделать наш Веб дружелюбнее и уютнее? Ну самое очевидное:
  • Сделать сайт более дружелюбным к пользователю, «поднять юзабилити». Например, отключать слайдшоу или ставить видео на паузу, когда вы переключаетесь в другой таб (например, вы смотрите видео на YouTube и вам приходит срочное эл. письмо).
  • Не потреблять лишних ресурсов. Выключать лишнюю логику, когда она не нужна, так как пользователь не видит сайт. Например, в фоновом табе отключать сложные JS-рассчёты или реже проверять новые сообщения по AJAX.
  • Считать более точную статистику. Например, не засчитывать пользователей, которые открыли ваш сайт в новом табе и закрыли его не просматривая.
  • Поддерживать новую технологию пререндеринга из Google Chrome, когда браузеру заранее загружает и рендерит указанную страницу, чтобы открыть её мгновенно. Например, в поиске Google первый результат выдачи будет отмечен на прередеринг.
  • Сделать эмулятор кота Шрёдингера (на иллюстрации), который отобразит живого или мёртвого кота только тогда, когда пользователь откроет загруженный в фоне таб.

Чтобы сделать работу с Page Visibility API более удобной, я (во славу Злых марсиан) разработал библиотеку Visibility.js. Она позволяет забыть о вендорных префиксах и добавляет «сахара» высокоуровневых функций, чтобы писать короткий чистый код (например, Visibility.every — аналог setInterval, но работает только, если сайт в открытом табе).

Милый пример видео-проигрывателя, который останавливает видео, когда страница становится невидимой (открывать в Google Chrome 13).
Читать дальше →

Введение в SproutCore, часть первая

Время на прочтение11 мин
Охват и читатели2.3K
В последнее время появилось много статей о JavaScript MVC фреймворках. Видимо есть потребность в подобных инструментах. Мое внимание привлек продукт под названием SproutCore. Обнаружив на скудное наличие информации на русском языке я решил перевести для себя ряд руководств с официального сайта фреймворка. Поделюсь с сообществом первым из них.

После прочтения этого руководства, вы сможете:
  • Использовать шаблоны SproutCore, для описания внешнего вида приложения;
  • Обрабатывать события внутри представления;
  • Использовать привязки(bindings) для обновления представления, после изменения состояния модели.


Вы узнаете все это во время создания приложения Todo-лист.

Исходный код этого приложения доступен на Github. Также есть скринкаст.
Читать дальше →

Взаимодействие между web-приложениями через Web Intents

Время на прочтение3 мин
Охват и читатели3.4K
Прим.: Обычно не занимаюсь переводами, но новость проскочила интересная.

В сегодняшней браузерной экосистеме веб-приложения полностью изолированы друг от друга, и для того, чтобы, к примеру, отправить комментарий в твиттер через сторонний сервис со своего сайта, необходимо использование сложных (Прим.: ну я бы просто сказал «разнообразных») API. А что если бы мы могли дать сайтам возможность использовать подобные сервисы не зная, какой конкретно сервис мы будем использовать, а зная лишь о том, что он предоставляет некий функционал.

В Android OS эта проблема решается при помощи Intents[1] — архитектуры, позволяющей взаимодействовать компонентам одного или нескольких различных приложений. По этой схеме, клиенсткое приложение создает запрос (к примеру, разослать что-нибудь) и задает параметры, которые будут переданы другому приложению-сервису. После этого пользователю предоставляется список приложений, которые регистрировали свою возможность обрабатывать данный тип intent-запроса. Затем выбранное пользователем приложение запускается в новом контексте, и ему передаются параметры, переданные клиентом в некоем, заранее определенном для конкретного типа intent, формате.

На данный момент мы прилагаем большие усилия для создания аналогичной системы для шеЬ: Web Intents. Эта система предоставит те же удобства, что и Intents для Android, но будет адаптирована для web-приложений.

Читать дальше →

KnockoutJS: Ajax grid view с нуля в 40 строк

Время на прочтение8 мин
Охват и читатели15K
В последнее время на Хабре все больше упоминаний о KnockoutJS, и я не останусь в стороне от этого тренда.
Сегодня я расскажу о том как сделать своими руками Ajax Grid View с фильтрацией и переходом по страницам написав, при этом, совсем немного кода.
Начиная писать эту статью я чувствовал себя несколько неловко, да и сейчас ощущение не ушло. Все дело в том, что сама библиотека простая, паттерн MVVM простой, и рассказывать я буду простые вещи. Я уверен, что в ближайшее время Knockout получит достаточно большое распространение. А неловко мне от того, что уже через год-дугой кто-то наткнувшись на эту статью будет обескуражен простотой изложенного материала. Примерно так, как любой из вас сейчас, открывший статью о jQuery от 2007 года.

Кто не испугался предполагаемого баяна, милости прошу под хабракат.

Читать дальше →

Первое знакомство с Google Maps Javascript API

Время на прочтение3 мин
Охват и читатели2.2K
В данном посте я расскажу о своем опыте использования Google Maps JS API и его внедрение в мобильную версию сайта с весьма крупной посещаемостью.
Читать дальше →

Нечёткий поиск на клиенте и Soundex

Время на прочтение7 мин
Охват и читатели9.5K
Soundex — один из алгоритмов сравнения двух строк по их звучанию. Был разработан чуть менее 100 лет назад Робертом Расселом и Маргарет Оделл. Активно используется в США при диктовке фамилий.

Я давно интересовался применением этого алгоритма и нашёл ему место для фильтрации данных на клиенте, а точнее, для поиска отеля по названию в проекте Островок.ru.

Задача

На Островке все найденные отели передаются на клиент и вся фильтрация и сортировка выдачи происходит в браузере. Необходимо было добавить фильтр по названию отеля.

Решение, проблемы и готовый скрипт

Вклад авторов