Archive for the 'Javascript' Category
Firebug Lite 1.2
Вышла новая версия Firebug Lite. Теперь можно дебагить свои скрипты в Safari, IE и Опере. В новой версии можно делать Inspect DOM элементов, следить за XHR запросами, и смотреть сгенерированный HTML, CSS и Javascript.
11 commentsqUIpt: кэшинг для джаваскрипта
Mario Heiderich выпустил qUIpt, библиотеку которая использует window.name для хранения различных данных. В его примере - для хранения джаваскрипта.
Работает скрипт довольно просто. qUIpt загружает другие джаваскрипт файлы на странице и сохраняет их содержимое в window.name. При следующем запросе джаваскрипт загружается уже из window.name.
Довольно интересный трюк, но я немного не понимаю какой в этом смысл. Стандартное кэширование браузером чем плохо?
8 commentsDrag & drop для HTML таблиц
Представляю вашему вниманию новый скрипт от Dan Vanderkam‘a. Называется скрипт dragtable и он добавляет к столбцам таблиц функциональность drag & drop. Пользоваться скриптом очень просто. Достаточно его подгрузить и к нужной таблице добавить CSS класс draggable.
Пример (На моём сайте скрипт немного глючит. Какие то конфликты с CSS от Wordpress):
| Сайт | Тип | Число |
| ajaxrussia.com | Новости | 123 |
| google.com | Поиск | 456 |
| apple.com | гаджеты | 789 |
В своей статье автор скрипта показывает как можно добавить к таблицам сортировку.
6 commentsПодгружаем картинки с Prototype
Все читали статью Подгружаем картинки с jQuery? Довольно таки забавный скрипт. Захотел вставить его на свою страницу и вспомнил, что на ней совсем не jQuery, а Prototype. Что же делать? А просто взять и переписать скрипт для Prototype.
Работает новый скрипт точно также. Парсит CSS стили на странице, достаёт из них все картинки и подгружает их. Единственное что я не стал делать, это систему оповещения о статусе загрузки. Мне это не надо, но сделать это не сложно. Сравните мой код с плагином jQuery и будет ясно куда этот вставить.
-
var AjaxRussia = {};
-
AjaxRussia.ImagePreloader = Class.create({
-
-
initialize: function(){
-
-
$A(document.styleSheets).each(function(sheet){
-
var cssPile = '';
-
var csshref = (sheet.href) ? sheet.href : 'window.location.href';
-
var baseURLarr = csshref.split('/');
-
baseURLarr.pop();
-
var baseURL = baseURLarr.join('/');
-
if (!baseURL.blank())
-
baseURL += '/';
-
if (sheet.cssRules) {
-
var thisSheetRules = sheet.cssRules;
-
$A(thisSheetRules).each(function(rule){
-
cssPile += rule.cssText;
-
});
-
}
-
else {
-
cssPile += sheet.cssText;
-
}
-
-
var imgUrls = cssPile.match(/[^\(]+\.(gif|jpg|jpeg|png)/g);
-
if (imgUrls != null && imgUrls.length> 0 && imgUrls != '') {
-
$A(imgUrls).each(function(url){
-
var image = new Image();
-
image.src = (url.charAt(0) == '/' || url.match('http://')) ? url : baseURL + url;
-
});
-
}
-
});
-
}
-
});
Использовать скрипт просто:
-
new AjaxRussia.ImagePreloader();
Только не надо этот код просто так писать на страницу. Иначе при каждой загрузке страницы CSS будет заново парситься. Я наверное буду вызывать AjaxRussia.ImagePreloader() только если у пользователя нету определённого куки. Ну а после работы AjaxRussia.ImagePreloader() соответственно эту куки сажать.
Подгружаем картинки с jQuery
Всем привет. Давненько не обновлял блог. Ездил в Питер на недельку, отдыхал, в интернет заходил редко да и то в основном на телефоне. Сейчас я снова в Гамбурге и постараюсь обновлять блог чаще, если только футбол не помешает
Вчера увидел интересный трюк, как подгружать картинки с jQuery. Все наверное сталкивались с такой ситуацией - надо показать какой нибудь модальный диалог, или lightbox. Так вот загружается этот lightbox, его уже видно, а какие нибудь картинки для бэкграунда ещё не загрузились. И пока они не загрузятся - выглядит такой lightbox тогда не очень красиво.
Решить такую проблему довольно просто. Надо чтобы браузер заранее загрузил все картинки, которые используются в CSS. Scott Jehl написал плагин для jQuery, который делает именно это.
-
/**
-
* --------------------------------------------------------------------
-
* jQuery-Plugin "preloadCssImages"
-
* by Scott Jehl, scott@filamentgroup.com
-
* http://www.filamentgroup.com
-
* reference article: http://www.filamentgroup.com/lab/update_automatically_preload_images_from_css_with_jquery/
-
* demo page: http://www.filamentgroup.com/examples/preloadImages/index_v2.php
-
*
-
* Copyright (c) 2008 Filament Group, Inc
-
* Dual licensed under the MIT (filamentgroup.com/examples/mit-license.txt) and GPL (filamentgroup.com/examples/gpl-license.txt) licenses.
-
*
-
* Version: 3.0, 06.21.2008
-
* Changelog:
-
* 02.20.2008 initial Version 1.0
-
* 06.04.2008 Version 2.0 : removed need for any passed arguments. Images load from any and all directories.
-
* 06.21.2008 Version 3.0 : Added options for loading status. Fixed IE abs image path bug (Thanks Sam Pohlenz).
-
* --------------------------------------------------------------------
-
*/
-
jQuery.preloadCssImages = function(settings){
-
var settings = jQuery.extend({
-
statusTextEl: null,
-
statusBarEl: null
-
}, settings);
-
-
var allImgs = [];//new array for all the image urls
-
var k = 0; //iterator for adding images
-
var sheets = document.styleSheets;//array of stylesheets
-
-
for(var i = 0; i<sheets.length; i++){//loop through each stylesheet
-
var cssPile = '';//create large string of all css rules in sheet
-
var csshref = (sheets[ i ].href) ? sheets[ i ].href : 'window.location.href';
-
var baseURLarr = csshref.split('/');//split href at / to make array
-
baseURLarr.pop();//remove file path from baseURL array
-
var baseURL = baseURLarr.join('/');//create base url for the images in this sheet (css file's dir)
-
if(baseURL!="") baseURL+='/'; //tack on a / if needed
-
if(document.styleSheets[ i ].cssRules){//w3
-
var thisSheetRules = document.styleSheets[ i ].cssRules; //w3
-
for(var j = 0; j<thisSheetRules.length; j++){
-
cssPile+= thisSheetRules[j].cssText;
-
}
-
}
-
else {
-
cssPile+= document.styleSheets[ i ].cssText;
-
}
-
-
//parse cssPile for image urls and load them into the DOM
-
var imgUrls = cssPile.match(/[^\(]+\.(gif|jpg|jpeg|png)/g);//reg ex to get a string of between a "(" and a ".filename"
-
var loaded = 0; //number of images loaded
-
if(imgUrls != null && imgUrls.length>0 && imgUrls != ''){//loop array\
-
var arr = jQuery.makeArray(imgUrls);//create array from regex obj
-
jQuery(arr).each(function(){
-
allImgs[ k ] = new Image(); //new img obj
-
allImgs[ k ].src = (this.charAt(0) == '/' || this.match('http://')) ? this : baseURL + this; //set src either absolute or rel to css dir
-
-
$(allImgs[ k ]).load(function(){
-
loaded++;
-
//send updates to status elements if applicable
-
if(settings.statusTextEl) {$(settings.statusTextEl).html('<span class="numLoaded">'+loaded+'</span> of <span class="numTotal">'+allImgs.length+'</span> loaded (<span class="percentLoaded">'+(loaded/allImgs.length*100).toFixed(0)+'%</span>) <span class="currentImg">Now Loading: <span>'+allImgs[loaded-1].src.split('/')[allImgs[loaded-1].src.split('/').length-1]+'</span></span>');
-
}
-
if(settings.statusBarEl) {
-
var barWidth = $(settings.statusBarEl).width();
-
$(settings.statusBarEl).css('background-position', -(barWidth-(barWidth*loaded/allImgs.length).toFixed(0))+'px 50%');
-
}
-
});
-
k++;
-
});
-
}
-
}//loop
-
return allImgs;
-
}
Этот плагин парсит css и подгружает все найденные картинки. Поэтому когда картинки понадобятся - они появятся мгновенно.
2 comments