Archive for the 'CSS' Category
Подгружаем картинки с 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Подсказки на CSS
Сегодня увидел один интересный CSS трюк для подсказок, или tooltips. Обычно их используют для ссылок, чтобы показать пользователю какую то дополнительную информацию, перед тем как он на ссылку нажмёт. Есть куча скриптов в интернете, с помощью которых можно сделать очень красивые подсказки, но Alen Grakalic придумал подсказки без джаваскрипта. Только с использованием CSS.
Идея очень простая, но эффективная. Вот маркап:
<a href='#'>Заголовок ссылки <span>Подсказка</span></a>
Итак мы хотим, чтобы посетитель видел только заголовок ссылки, а подсказку видел при наведении мышкой. Read more
20 commentsCSS naked day
9-го апреля - международный CSS Naked Day, когда тысячи сайтов и блогов отключают css и выдают посетителям только HTML. Эту традицию начал Dustin Diaz - вэб разработчик на Google. Идея всего этого простая - продвигать вэб стандарты, семантический маркап и хорошую структуру сайтов.
AjaxRussia тоже участвует в этом проекте, и css завтра (9го апреля) вы не увидите!
Если кто то хочет поучаствовать, то сделать это довольно просто. Dustin Diaz написал для этого небольшую php функцию.
Использовать эту функцию можно примерно так:
-
...
-
<?php
-
if ( is_naked_day(9) ) {
-
echo '<!-- naked day has no styles -->';
-
} else {
-
echo '<link rel="stylesheet" type="text/css" href="styles.css" />';
-
}
-
?>
-
...
-
</head>
Всем удачи и весёлого CSS Naked Day!
5 commentsCSS Live
Наверное боян, но картинка прикольная. Показывает разработку сайта с помощью CSS и как при этом изменяется сайт.
