Archive for the 'Javascript' Category
Javascript Lazy Loading
Сам недавно с подобным столкнулся. Написал джаваскрипт класс, который будет использоваться довольно редко. Размер у файла получился довольно большой и стало жалко траффика. Что делать?
А делать надо вот что - подгружать этот файл только тогда, когда это действительно надо. Сделать это довольно просто со следующим скриптом.
-
/**
-
* Script lazy loader 0.5
-
* Copyright (c) 2008 Bob Matsuoka
-
* This program is free software; you can redistribute it and/or
-
* modify it under the terms of the GNU General Public License
-
* as published by the Free Software Foundation; either version 2
-
* of the License, or (at your option) any later version.
-
*/
-
var LazyLoader = {}; //namespace
-
LazyLoader.timer = {}; // contains timers for scripts
-
LazyLoader.scripts = []; // contains called script references
-
LazyLoader.load = function(url, callback){
-
-
// handle object or path
-
var classname = null;
-
var properties = null;
-
-
try {
-
// make sure we only load once
-
if ($A(LazyLoader.scripts).indexOf(url) == -1) {
-
// note that we loaded already
-
LazyLoader.scripts.push(url);
-
var script = document.createElement("script");
-
script.src = url;
-
script.type = "text/javascript";
-
$$("head")[0].appendChild(script); // add script tag to head element
-
// was a callback requested
-
if (callback) {
-
// test for onreadystatechange to trigger callback
-
script.onreadystatechange = function(){
-
if (script.readyState == 'loaded' || script.readyState == 'complete') {
-
callback();
-
}
-
}
-
// test for onload to trigger callback
-
script.onload = function(){
-
callback();
-
return;
-
}
-
// safari doesn't support either onload or readystate, create a timer
-
// only way to do this in safari
-
if ((Prototype.Browser.WebKit && !navigator.userAgent.match(/Version\/3/)) || Prototype.Browser.Opera) { // sniff
-
LazyLoader.timer[url] = setInterval(function(){
-
if (/loaded|complete/.test(document.readyState)) {
-
clearInterval(LazyLoader.timer[url]);
-
callback(); // call the callback handler
-
}
-
}, 10);
-
}
-
}
-
}
-
else {
-
if (callback) {
-
callback();
-
}
-
}
-
}
-
catch (e) {
-
alert(e);
-
}
-
}
Использовать очень просто. Можно или просто подгрузить нужный файл:
-
LazyLoader.load('js/ajaxrussia.js');
Или погрузить с callbacks. Tо есть чтобы сразу после загрузки выполнить какую нибудь функцию:
-
LazyLoader.load('js/ajaxrussia.js', function(){
-
var test= new AjaxRussia('test');
-
});
Для работы скрипта нужен Prototype.
6 commentsХостим Javascript на Google
Вам никогда не приходила в голову мысль, как было бы здорово если все сайты хостили популярные джаваскрипт библиотеки на одном сервере? Только подумайте сколько траффика это бы всем сэкономило. Зашёл на один сайт, например Digg.com, браузер скачал ихний jQuery, потом перешёл на другой сайт, где используется тот же скрипт и уже скачивать ничего не надо. На Yahoo уже давно это делали для YUI, так а почему этого нету для других библиотек? Теперь есть!
Ребята из Google AJAX Libraries API объявили, что теперь будут хостить все популярные библиотеки на серверах Google. Больше не придётся думать о кэшинге, gzip-е, хостинге, трффике и тд. На данный момент поддерживаются Prototype, Script.aculo.us, jQuery, Dojo и MooTools. Read more
8 commentsWolfenstein 3D на джаваскрипте
Все помнят Super Mario на джаваскрипте? Его создатель - Jacob Seidelin решил не останавливаться на достигнутом и написал онлайн версию Wolfendtein 3D с использованием Javascript, Canvas и немного аякса. Игра работает в Firefox 2.0.0.14, FF3 beta5, Safari 3.1.1 и Opera (9.27 и 9.50b).
Управление:
WASD или стрелки для движения.
x - открывать двери.
c - стрелять.
Starbox - рейтинг на Prototype
Все наверное не раз видели в интернете звёздочки для рейтингов. Это мог быть рейтинг для фоток, или рейтинг для статьи на блоге или ещё что нибудь. Сейчас расскажу как сделать такой рейтинг самому.
Использовать мы будем Starbox. Starbox это скрипт на базе Prototype и Scriptaculous, который позволяет добавлять рейтинги буквально парой строчек кода.

- Установка
Starbox требует Prototype 1.6.0.2 и Scriptaculous 1.8.1. Скачайте и подгрузите их в HEAD вместе с starbox.js и starbox.css. Картинки для звёзд надо распаковать в папку images.HTML: - Использование
Сделаем пустой DIV для рейтинга, и запустим Starbox скрипт. - Отправляем рейтинг на сервер
У Starbox есть свой custom event - starbox:rated. Его мы будем ждать с помощью Prototype и посылать на сервер.JavaScript:-
document.observe('starbox:rated', function(event){
-
function saveStar(event) {
-
new Ajax.Request('savestar.php', {
-
parameters: event.memo
-
});
-
}
-
});
event.memo содержит информацию на какую звезду кликнули и её рейтинг. Как обработать эти данные на сервере и записать в базу я объяснять не буду. Google вам в помощь
-
Скачать Starbox и почитать подробнее об использовании можно на сайте разработчика.
1 commentВведение в JSON
Среди форматов обмена данными, AJAX программисты часто выделяют JSON (JavaScript Object Notation, "джейсн"), как альтернатива языку XML, а именно потому, что XML больше язык разметки, чем носитель данных. JSON в свою очередь, легкий, человеко-читабельный, текстовый формат для хранения и передачи простых структурированных данных, а так же более комплексных объектов (массивов). В этом уроке мы рассмотрим простой пример формирования данных в JSON средствами PHP, а так же их получение и представление, с помощью JavaScript. Кто еще не понял, это продолжение серии уроков "AJAX PHP поиск" (XML, Prototype).
Read more
