Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   UpJump: Q&A :) (https://javascript.ru/forum/misc/14421-upjump-q.html)

UpJump 09.08.2011 22:14

прошу прощения - бред написал выше

UpJump 10.08.2011 00:39

Всем привет.
<!DOCTYPE HTML 4.0>
<html xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<style>
v\:*{behavior: url(#default#VML);}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<script type="text/javascript">
var shape = document.createElement('v:shape');
document.body.appendChild(shape);
var formulas = document.createElement('v:formulas');
formulas.className = 'c';
shape.appendChild(formulas);
shape.coordsize = "500,500";
shape.style.position = 'absolute';
shape.className = 'c';
shape.fillcolor="red";
shape.style.width = '500px';
shape.style.height = '500px';
var path = "m 100,100 l 200,300 300,400 200,100 x e ns"
shape.setAttribute('path',path);
</script>
</body>

</html>

Данный код рисует изображение только при условии !DOCTYPE HTML 4.0 или вообще без доктайпа, но как заставить его нарисовать картинку с использованием DOCTYPE HTML или HTML 5.0? Народ прошу откликнетесь, знаю что тема малоинтересная, но все же.

devote 10.08.2011 04:39

<!DOCTYPE HTML>
<xml:namespace ns="urn:schemas-microsoft-com:vml" prefix="v" />
<html>
<head>
<style>
v\:shape{behavior: url(#default#VML);}
v\:formulas{behavior: url(#default#VML);}
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<script type="text/javascript">
var shape = document.createElement('v:shape');
document.body.appendChild(shape);
var formulas = document.createElement('v:formulas');
formulas.className = 'c';
shape.appendChild(formulas);
shape.coordsize = "500,500";
shape.style.position = 'absolute';
shape.className = 'c';
shape.fillcolor="red";
shape.style.width = '500px';
shape.style.height = '500px';
shape.path = "m 100,100 l 200,300 300,400 200,100 x e ns";
//shape.setAttribute('path',path);
</script>
</body>

</html>


IE 8 css свойство вида: v\:* не понимает, нужно указывать явно названия элементов.
задавать path через .setAttribute в ИЕ не надо. Он так работать не будет, нужно обращаться на прямую shape.path
ну и как видишь namespace нужно указывать в xml теге а не в html

что бы не прописывать XML тег и не писать стили, это можно сделать через javascript:
try {
	if (!document.namespaces.v) {
		document.namespaces.add("v", "urn:schemas-microsoft-com:vml");
	}
} catch (e) {}

document.v_shape_stylesheet = document.createStyleSheet();
document.v_shape_stylesheet.addRule("v\\:shape", "behavior: url(#default#VML);");
document.v_shape_stylesheet.addRule("v\\:formulas", "behavior: url(#default#VML);");

Удачи!

UpJump 10.08.2011 13:34

devote,
от спасибо за исчерпывающий ответ!

UpJump 11.08.2011 01:48

Всем привет!:) Вот балуюсь дальше с канвасом. Получил какой-то зэбский эфект при добавлении стилей к самому канвасу.
<body>
<script type="text/javascript">
	var cnvs =  document.createElement('canvas');
	document.body.appendChild(cnvs);
	cnvs.style.height = "1000px";
	cnvs.style.width = "1000px";
	
	var c = cnvs.getContext('2d');
	c.fillStyle = "#f00";
	c.fillRect(10,10,100,100);
	c.fill();
</script>
</body>

В итоге квадрат не квадрат да еще и замылинный, так сказать "блур".
Кто-нибудь встречал подобный прикол?

UPD
Если писать в процентах ширину и высоту то прикол работает более верно.
<body>
<script type="text/javascript">
	var cnvs =  document.createElement('canvas');
	document.body.appendChild(cnvs);
	cnvs.style.height = "200%";
	cnvs.style.width = "200%";
	
	var c = cnvs.getContext('2d');
	c.fillStyle = "#f00";
	c.fillRect(10,10,100,100);
	c.fill();
</script>
</body>

melky 11.08.2011 01:56

хм.. размытие без флеша и сильверлайта? в JS ?

заманчиво, UpJump !

UpJump 11.08.2011 02:05

melky,
мне тоже эта темка по душе, но блин не может же быть это просто положительным побочным эффектом, хотя сколько не читал про канвас ничего подобного не видел.

melky 11.08.2011 02:10

не могу про это нагуглить

нашел блур для картинок, блур даже для страницы html

последнее повергло в шок. это чо ?

насчет последнего : это трюк с css.

смотри стили у элемента с id="overlay"

UpJump 11.08.2011 02:15

ну да юмор.

kobezzza 11.08.2011 02:34

Цитата:

Сообщение от melky (Сообщение 119640)
хм.. размытие без флеша и сильверлайта? в JS ?

заманчиво, UpJump !

Это ещё семечки:) Поиграй например в http://media.tojicode.com/q3bsp/ :)

UpJump 11.08.2011 03:35

kobezzza,
знаю эту тему.:)
Но там одним канвасом дело не обходится.

kobezzza 11.08.2011 09:40

Ну там канвас в контексте WebGL:)

x-yuri 11.08.2011 19:59

Цитата:

Сообщение от UpJump
Всем привет! Вот балуюсь дальше с канвасом. Получил какой-то зэбский эфект при добавлении стилей к самому канвасу.

с помощью стилей ты масштабируешь canvas: 300x150 -> 1000x1000
<!doctype html>
<html>
<body>
<script>
var cnvs =  document.createElement('canvas');
document.body.appendChild(cnvs);
cnvs.height = 1000;
cnvs.width = 1000;

var c = cnvs.getContext('2d');
c.fillStyle = "#f00";
c.fillRect(10,10,100,100);
c.fill();
</script>
</body>
</html>

UpJump 15.08.2011 19:27

x-yuri, уже понял:)

UpJump 15.08.2011 19:34

Всем привет! Господа помогите разобраться с чисткой памяти.
Вот код:

<!DOCTYPE HTML>

<html>
<head>
</head>
<body>
<script type="text/javascript">

var body = document.body;
document.onclick = add;
function add(){
	var div = document.createElement("div");
	body.appendChild(div);
	body.removeChild(div);
	div=null;
}

</script>
</body>
</html>


Дело такое. Не удаляет насовсем из памяти созданные div-ы при клике. Вроде ссылки на объект не оставляю. Короче не пойму никак в чем подвох.
ЗЫ
Тестил с помощью sIEve-0.0.8.

B@rmaley.e><e 15.08.2011 19:57

UpJump, http://beta.javascript.ru/tutorial/memory-leaks

UpJump 15.08.2011 22:06

B@rmaley.e><e,
спасибо, уже читал:). Впрочем проблема не прослеживается как оказалось ни в одном браузере. Возможно не стоит так сильно доверять стороннему софту.

UpJump 07.09.2011 17:49

Всем привет!

var str="MadMax";
var re = /(?=Mad).+/;
alert(re.exec(str));


В общем не врублюсь в чем соль. Ожидаю получить "Max". Как я понимаю "Mad" должно игнорироваться.

e1f 07.09.2011 18:14

x(?=y) Находит x, только если за x следует y.

Логично, что не должно, верно?
Возможно, поможет это

Kolyaj 07.09.2011 18:22

Цитата:

Сообщение от UpJump
/(?=Mad).+/

Расшифровываю: начиная с позиции, справа от которой находится Mad, взять не меньше одного символа.

Сравните
var str="MadMax";
var re = /(?=dM).+/;
alert(re.exec(str));

UpJump 07.09.2011 18:42

Хорошо но ведь это не должно уж точно запоминать 'M', но в итоге мимо.
var str="MadMax";
var re = /(?:M).+/;
alert(re.exec(str));

Kolyaj 07.09.2011 18:54

Запоминать не должно, а входить в найденное M будет.

Вы пытаетесь реализовать просмотр назад, которого нет в JavaScript.

UpJump 07.09.2011 19:02

Цитата:

Вы пытаетесь реализовать просмотр назад, которого нет в JavaScript.
извиняюсь за тупизну но я вас не совсем понял.

Kolyaj 07.09.2011 19:13

Вы хотите найти строку Max слева, от которой находится строка Mad, правильно? Это называется просмотр назад.

UpJump 07.09.2011 19:30

Все ясно. Спасибо


Часовой пояс GMT +3, время: 23:53.