фон по диагонали
Вложений: 1
Как зделать повторяющийся от центра фон по диагонали с помощью однопиксельной картинки. При этом фон должен быть резиновым по высоте.
Вот пример фона :help: |
Цитата:
|
попиксельно рисуем фон на canvas с помощью одного однопиксельного img, который для каждой точки меняем с помощью data: url
var a = ['О', 'П', 'Ж', 'А'];
alert(a[0].replace('О', 'в')+a[1].replace('П', 'е')+a[2].replace('Ж', 'ч')+a[3].replace('А', 'н')+a[0].replace('О', 'о')+a[1].replace('П', 'с')+a[2].replace('Ж', 'т')+a[3].replace('А', 'ь'))
ну как? :) |
Из картики 1x1 пиксель не сделать такой фон.
Подобный фон можно сделать векторной графикой - VML/SVG |
Logo, не только, можно даже с градиентом :D
<script type="text/javascript">
window.onload = function(){
var i = 0;
(function(){
for(j=0; j<15; j++){
if(++i <= document.documentElement.clientHeight){
var element = document.createElement('div');
element.style.cssText = 'background: #'+0+j+j+j+j+j+'; top:'+i+'px; left:'+i+'px';
document.body.appendChild(element);
setTimeout(arguments.callee, 10);
}
}
})();
};
</script>
<style type="text/css">
body {background: red;}
div {
position: absolute;
color: white;
text-align: center;
width: 50px;
height: 50px;
}
</style>
<div></div>
|
или даже что-то высоко художественное, без всяких canvas :D
<script type="text/javascript">
window.onload = function(){
var div = document.getElementsByTagName('div')[0], square = document.body.offsetWidth, i = 0;
(function(){
if(i++<square){
for(j=0; j<15; j++){
var element = document.createElement('div');
element.style.top = 50+50*Math.sin(20*(i+Math.PI/2)*20)+'px';
element.style.left = i+'px';
element.style.background = '#'+i+i+0+j+i+i;
document.body.appendChild(element);
}
}
window.setTimeout(arguments.callee, 1);
})();
};
</script>
<style type="text/css">
body {background: #DDD;}
div {
position: absolute;
width: 8px;
height: 8px;
}
</style>
|
Я дико извиняюсь за дачу ложной информации;) Я имел ввиду, что 1px - высота картинки, а ширина 1000px
|
Нужно чтобы эта фоновая картина при каждой прорисовке вниз, меняла позицию на 1px влево
|
В таком случае надо вручную(не совсем конечно) сделать изображение в полный цикл и поэксперементировать с pngout. Есть вероятность что результирующий вес будет немногим больше оригинала.
|
а чего, я вот квадратный градиент в вакууме нарисовал (осторожно, браузер может уйти в себя и не вернуться)
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<style type="text/css">
div {
width: 1px;
height: 1px;
overflow: hidden;
float: left;
}
</style>
<script>
for( var j=0; j<128; j++ )
for( var k=j; k<j+128; k++ ){
var div = document.createElement('div');
div.style.background = 'rgb('+[0,0,k].join(',')+')';
if( k == j )
div.style.clear = 'left';
document.body.appendChild( div );
}
</script>
</body>
</html>
|
DyadkaSashka, мой первый пример делает примерно тоже самое:
x-yuri, после запуска вашего примера мой сафари лапки поднял, так и не показав задуманное
<script type="text/javascript">
window.onload = function(){
var i = 0;
(function(){
if(++i <= document.documentElement.clientHeight){
var element = document.createElement('div');
element.style.cssText = 'top:'+i+'px; left:'+i+'px';
document.body.appendChild(element);
setTimeout(arguments.callee, 10);
}
})();
};
</script>
<style type="text/css">
body {background: red;}
div {
background: blue;
position: absolute;
color: white;
text-align: center;
width: 1000px;
height: 50px;
}
</style>
<div></div>
|
monolithed, под windows? Странно, мой подумал, но решил не поднимать, сорри
|
Цитата:
|
ну вот уменьшенный в два раза (осторожно, браузер может уйти в себя и не вернуться)
<!DOCTYPE HTML>
<html>
<head>
</head>
<body>
<style type="text/css">
div {
width: 1px;
height: 1px;
overflow: hidden;
float: left;
}
</style>
<script>
for( var j=0; j<128; j+=2 )
for( var k=j; k<j+128; k+=2 ){
var div = document.createElement('div');
div.style.background = 'rgb('+[0,0,k].join(',')+')';
if( k == j )
div.style.clear = 'left';
document.body.appendChild( div );
}
</script>
</body>
</html>
|
Мне ff четырежды предложил остановить скрипт, но цуко не останавливал)
|
ага, даже при уменьшенном размере, думаю, что можно без вложенных циклов обойтись, только одним: -?
мой предпоследний пример с художествами и то не грузит так проц.. |
Зато изображение отрисованное таким образом хорошо жмётся в пнг.)
Говорю по личному опыту: когда-то в молодости, когда о canvas и слыхом не слыхивал понадобилось отрисовать мне хитрую генерировану картинку. 256*256px(дивов)=) |
Вложений: 1
ну извините
Цитата:
прикрепил, результат во вложении p.s. а может в опере запуститься? |
Цитата:
|
Вложений: 2
а вот градиент, нарисованный с помощью canvas и однопиксельного изображения
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="64" height="64"></canvas>
<script type="text/javascript">
var tmpCtx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.onload = function(){
for( var i=0; i<64; i++ )
for( var j=i; j<i+64; j++ )
tmpCtx.drawImage(this, j, 0, 1, 1, j-i, i, 1, 1);
};
img.src = 'http://javascript.ru/forum/attachment.php?attachmentid=645&stc=1&d=1295143633';
</script>
</body>
</html>
Цитата:
Цитата:
и, наконец... сферический градиент в вакууме :) промежуточный вариант:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="128" height="128"></canvas>
<script type="text/javascript">
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.onload = function(){
for( var r=0; r<img.width; r++ )
for( var phi=0; phi<2*Math.PI; phi++ )
ctx.drawImage(this, r, 0, 1, 1, 64+r*Math.cos(phi), 64+r*Math.sin(phi), 1, 1);
};
img.src = 'http://javascript.ru/forum/attachment.php?attachmentid=647&stc=1&d=1295146484';
</script>
</body>
</html>
окончательный:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<canvas id="canvas" width="128" height="128"></canvas>
<script type="text/javascript">
var ctx = document.getElementById('canvas').getContext('2d');
var img = new Image();
img.onload = function(){
for( var y=0; y<128; y++ )
for( var x=0; x<128; x++ ){
var r = Math.round(
Math.sqrt(Math.pow(x-64, 2) + Math.pow(y-64, 2))
);
if( r < 64 )
ctx.drawImage(this, r, 0, 1, 1, x, y, 1, 1);
}
};
img.src = 'http://javascript.ru/forum/attachment.php?attachmentid=647&stc=1&d=1295146484';
</script>
</body>
</html>
|
x-yuri, у меня первый твой градиент где-то за 0.5 секунды отлично отработался, а второй уменьшенный вообще моментально. (Opera 11, Windows Vista Ultimate).
|
это хорошо, конечно. Только вот monolithed и Aetae от этого не легче...
|
Вложений: 1
По теме - вот пнг-шка 1024 на 5120, всего 15.6Кб.(можно и меньший размер получить)
<div style="width:1000px;height:2048px;background:0 -1300px url('http://ajitae.no-ip.org/bg.png')">d</div>
//Пришлось архивировать и делать ссылку вовне, ибо загружать можно не более 620х280.(что за бред кстати, на jpg вон лимита по разрешению нет) |
DyadkaSashka,
объясни пожалуйста: "повторяющийся от центра" - центра рабочей области браузера или документа "фон должен быть резиновым по высоте" опять же уголки всегда статичны на экране и фон меняется и при изменении экрана браузера или они бэкграунд документа и фон меняется в зависимости от количество контента и размер уголков определённый или берётся в отношении к чему-то пардон за непонятливость. но кажется я знаю как реализовать такое при помощи GD (PHP) и AJAX (JS) |
1. от центра браузера
2. бг и фон меняется в зависимости количества контента 3. Размера уголков нету. Есть определенный размер серой плашки.Уголки это основной бэкграунд |
если эта плашка одна и находится по середине клиентской области браузера, то как может влиять контент?
|
а я сделал!:)
как и говорил, Javascript + PHP + школьный курс геометрии за 8-ой класс вот: прошу любоваться работает без багов во всех браузерах слева можно забить: -высоту документа -ширину серой полосы -угол наклона (0-90) вес генерируемой картинки даже при размере 1650х1000 не привышает 5 KB JS код в исходнике по ссылке а PHP вот он:
<?
$v = explode("|", substr($_GET['z'], 0, -1));
echo $n = mt_rand();
$h = opendir(".");
while (false !== ($f = readdir($h)))
{
if (preg_match("/bg/", $f)) { unlink($f); }
}
closedir($h);
$i = imagecreatetruecolor($_GET['w'], $_GET['h']);
$c = imagecolorallocate($i, 255, 120, 0);
$b = imagecolorallocate($i, 240, 240, 240);
imagefilledrectangle($i, 0, 0, $_GET['w'], $_GET['h'], $c);
imagefilledpolygon($i, $v, $_GET['p'], $b);
imagegif($i, 'bg_'.$n.'.gif');
imagedestroy($i);
?>
всем успехов:dance: |
сферический велосипед для сферической задачи в вакууме...
|
| Часовой пояс GMT +3, время: 21:52. |