Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 01.04.2013, 20:25
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Текстовая Анимация на Canvase.
Здравствуйте.
Недавно начал разбираться над тем, что представляет из себя тег Canvas и по ходу дела столкнулся с вопросами,связанными с текстовой анимацией(и не только):

1) Есть страница,
http://yamaradg.narod2.ru/Canvas/canvas_4.html
на которой имеется анимация!(см. на словосочетание 'First Sector')
В нём используется подгрузка нестандартных шрифтов через Font-Face из за чего пришлось городить много лишнего.

В данной реализации возникают определённые трудности:
В браузере Safary появляются глюки(скрин прикрепил) Необходимо подождать пока текст до нижней части холста 'дойдёт' – что бы это увидеть...

Идея текстовой анимации такова:
Перед каждым выводом текста заново должен прорисовывается фон. В данном случае это обеспечивает бежевый квадрат 200 х 200:
ctx.fillRect(48,48,200,200);

Вопросы:
1) Когда слова выходят за пределы этого квадрата, начинают оставаться следы от этих слов. как это можно обойти?
Не хотелось бы пропуcкать весь холст через setInterval !?
Поскольку во первых происходит задержка при подгрузке всего содержимого, а во вторых тени также начинают копироваться вместе с текстом(если их включать):
http://yamaradg.narod2.ru/Canvas/canvas_3.html
(что естественно не приемлимо.)

2) Cуществует ли какой-нибудь механизм в JS, который бы 'подчищал' всё то лишнее, что рисуется в более глубоких слоях?(в данном примере.) + старые текстовые слои?

3) Возможно ли осуществить тестовую анимацию на холсте как то по другому?

4) Пока не могу разобраться, как прописать ф-цию(в js я не силён) , которая заставляла бы текст прекращать движение в случае если он подходит к краям бежевого слоя(с красной рамкой.)
Возможно ли использовать в данном случае св-во 'isPointInPath'?
Не могу понять как оно функционирует.
(облазил весь инет - не нашёл ни одного нормального, детального разбора(с примерами) этого св-ва!)

Код с вышеописанным примером выглядит следующим образом:
var canvas, ctx, w, h;
	             
	             canvas = document.getElementById('canvas');
	             w = canvas.width;
	             h = canvas.height;
	             ctx = canvas.getContext('2d');
	             ctx.save();
	             
	             ctx.beginPath();
	             ctx.shadowColor = "red";
	             ctx.shadowOffsetX=1;
	             ctx.shadowOffsetY=1;
	             ctx.shadowBlur =2;
	             ctx.strokeStyle="red";
	             ctx.strokeRect(48,48,200,200);
	             ctx.closePath();
	             
                  x=10;y=10;

	             function myTimeout(){	             	
	             	
	                     ctx.beginPath();
	                     ctx.shadowColor = "transparent";
	                     ctx.fillStyle="#CC9933";
			             ctx.fillRect(48,48,200,200);
	             	     ctx.closePath();
	             	     
	             	     ctx.beginPath();
			            ctx.shadowColor = "transparent";
	             	    ctx.fillStyle="blue";
	             	    ctx.fillRect(48,48,100,100);
	             	    ctx.closePath();
	             	    
	             	    ctx.beginPath();
	             	    ctx.shadowColor = "transparent";
	                    ctx.fillStyle = "green";
	                    ctx.arc(148, 148, 25, Math.PI*3/2, Math.PI, false); 
	                    ctx.fill();
	                    ctx.closePath();
	             	    
	             	    ctx.beginPath();
	             	    if (ctx.isPointInPath(50,50)==true) {
	                    	alert('Ура !');
	                    };
	             	    ctx.fillStyle="red";
					    ctx.font="400 15px orbitronioregular";
					    ctx.shadowBlur = 40;
			            ctx.shadowOffsetX=7;
			            ctx.shadowOffsetY=7;
			            ctx.shadowColor = "#cc9933";
	                    ctx.fillText("First",x+64,y+82);
	                    ctx.fillText("Sector",x+56,y+102);
	                    ctx.restore();
	                    x+=5;y+=5;
	                    
	                    ctx.closePath();
	                    
					};
					
					intervalID=setInterval(myTimeout,1000);


<!DOCTYPE html>
<html>
<head>
	<link href="style_2.css" type="text/css" rel="stylesheet">
</head>
<body>
		<canvas id="canvas" width="298" height="298">
			           Not Support Canvas
		</canvas>
		<span>Text For Canvas</span>
	
	<script src="script_4.js" type="text/javascript"></script>
</body>
</html>


Код:
@font-face {
    font-family: 'orbitronioregular';
    src: url('orbitronio-webfont.eot');
    src: url('orbitronio-webfont.eot?#iefix') format('embedded-opentype'),
         url('orbitronio-webfont.woff') format('woff'),
         url('orbitronio-webfont.ttf') format('truetype'),
         url('orbitronio-webfont.svg#orbitronioregular') format('svg');
    font-weight: normal;
    font-style: normal;

}
body{
	margin:0;
	padding:0;
	background-color:#fff;
}
span{position:absolute;
	font:normal 16px/21px  orbitronioregular;
	color:orange;
	margin:0 0 0 -9999px;
}
#canvas{
	border-radius:155px;
	border:1px solid #CC9933;
	background-color:#c0c0c0;
	margin:10px 0 0 10px;
	box-shadow:2px 2px 15px #CC9933;
}
Буду очень признателен, если кто поможет разобраться хоть в каких то вопросах, относительно данной ситуации..
Изображения:
Тип файла: jpg safary_canvas.jpg (84.8 Кб, 8 просмотров)

Последний раз редактировалось Mike_Kharkov, 01.04.2013 в 21:11.
Ответить с цитированием
  #2 (permalink)  
Старый 01.04.2013, 20:32
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Лень смотреть код и читать написанное.
Проблема в том что , когда текст выходит за пределы "стираемой области" след от него остаётся - он не стирается?
Даже при сохранении состояния канвы?
Если да -сохранение и возврат состояния канвы не очищает нарисованное, а возвращает состояние к сохранённому: угол поворота, центр...
Ответить с цитированием
  #3 (permalink)  
Старый 01.04.2013, 20:35
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Сообщение от dmitriymar Посмотреть сообщение
Проблема в том что , когда текст выходит за приделы "стираемой области" след от него остаётся - он не стирается?
Даже при сохранении состояния какнвы? Если да -сохранение состояния канвы не очищает нарисованное, а возвращает состояние к сохранённому: угол поворота, центр...
Текст не стирается. Св-во Save(); не запоминает состояние текста, насколько мне известно.
Насчёт угла поворота центра и т.д. - я не совсем вас понял?

Последний раз редактировалось Mike_Kharkov, 01.04.2013 в 20:40.
Ответить с цитированием
  #4 (permalink)  
Старый 01.04.2013, 20:42
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Mike_Kharkov
Текст не стирается.
почему он должен стираться за пределами очищаемой области?
пока сами не сотрёте то, что нарисовано -оно не затрёться
под сотрётся: затирание другим контентом, очистка области , заливка необходимым цветом ..
Сообщение от Mike_Kharkov
Cуществует ли какой-нибудь механизм в JS, который бы 'подчищал' всё то лишнее, что рисуется в более глубоких слоях?(в данном примере.) + старые текстовые слои?
Нет такого механизма -всё руками задавать

Всё что нарисовано на канве , не удалится при восстановлении до состояния "пока не рисовалось"
Ответить с цитированием
  #5 (permalink)  
Старый 01.04.2013, 20:46
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Сообщение от dmitriymar Посмотреть сообщение
Нет такого механизма -всё руками задавать

Всё что нарисовано на канве , не удалится при восстановлении до состояния "пока не рисовалось"
Именно это меня и интересует!
Что конкретно нужно прописать(руками) что бы все старые ненужные слои подчищались?
Ответить с цитированием
  #6 (permalink)  
Старый 01.04.2013, 20:48
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Mike_Kharkov
Что конкретно нужно прописать(руками) что бы все старые ненужные слои подчищались?
задать область, какую стирать и стирать её либо очисткой либо закраской.
а в обще может поможет "слоёная канва" -несколько канв , опр. размера, лежащих друг на друге
а в обще всё ответы на подобные вопросы ,есть в мало мальски приличном тутореале по канве, каких в сети тысячи, как и есть в свободной скачке несколько книг по канве

Последний раз редактировалось dmitriymar, 01.04.2013 в 20:52.
Ответить с цитированием
  #7 (permalink)  
Старый 01.04.2013, 20:53
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Сообщение от dmitriymar Посмотреть сообщение
задать обшласть какую стирать и стирать её либо очисткой
Как конкретно это можно сделать?

Сообщение от dmitriymar Посмотреть сообщение
а в обще может поможет "слоёная канва" -несколько канв , опрт размера лежащих друг на друге
Вы имеете ввиду несколько тегов Canvas? (Или слоёв внутри тега? Именно так, насколько я понимаю и реализован мой пример.)

Сообщение от dmitriymar Посмотреть сообщение
а в обще всё ответы е=но подобные вопросы ,есть в мало мальски приличном тутореале по канве, каких в сети тысячи
Можете примеры привести на русском языке(не на инглише)?
(что бы описывалось, как именно решать данный вопрос с текстовой анимацией. Лично я найти этого не смог.)
Ответить с цитированием
  #8 (permalink)  
Старый 01.04.2013, 21:04
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Mike_Kharkov
(Или слоёв внутри тега? Именно так, насколько я понимаю и реализован мой пример.)
чего?
В канве всегда 1 слой!! А различные изображения, фигуры наслаиваются на канву(на существующее изображение канвы и образуя "новое изображение" канвы) в порядке их рисования и по заданным правилам .

Сообщение от Mike_Kharkov
Как конкретно это можно сделать?
Не полинитись и воспользуйтесь гуглом
Сообщение от Mike_Kharkov
Можете примеры привести на русском языке(не на инглише)?
??? а вот на подобное предложение я вызверюсь, в гугле забанили ? не получается ввести фразу поисковую типа стереть canvas?

Последний раз редактировалось dmitriymar, 01.04.2013 в 21:14.
Ответить с цитированием
  #9 (permalink)  
Старый 01.04.2013, 21:14
Аватар для Mike_Kharkov
Кандидат Javascript-наук
Отправить личное сообщение для Mike_Kharkov Посмотреть профиль Найти все сообщения от Mike_Kharkov
 
Регистрация: 04.01.2012
Сообщений: 143

Спасибо за 'помощь'!
Я перед созданием поста - сутки в гугле инфу пробивал по данной тематике. Если бы, что то обнаружил(ответы на свои вопросы) то точно бы сюда не обращался..
P.S. Под слоями(внутри холста) я подразумевал контуры..

Беру пример описания метода 'isPointInPath':
http://www.xiper.net/manuals/canvas/...intInPath.html
Как конкретно он работает я так и не понял!?
(Пробую в разные места кода(вместе с этим методом) Аlert подставлять и ноль реакции!)
В других источниках тоже самое примерно!
(в том числе и в поиске по этому форуму!)
Где мне ещё гуглить?

Последний раз редактировалось Mike_Kharkov, 01.04.2013 в 21:21.
Ответить с цитированием
  #10 (permalink)  
Старый 01.04.2013, 21:20
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

Сообщение от Mike_Kharkov
Спасибо за 'помощь'!
Я перед созданием поста - сутки в гугле инфу пробивал по данной тематике. Если бы, что то обнаружил(ответы на свои вопросы) то точно бы сюда не обращался..
P.S. Под слоями(внутри холста) я подразумевал контуры..
ну тогда в первую очередь нужно научится пользоваться гуглом
http://www.google.com.ar/search?sour...%83+javascript

первый же http://vremenno.net/js/introducing-canvas/
А вы уважаемый, не путайте помощь и посадку на голову . Потратить немного времени не влом , но хотеть чтоб тратилось время на
Сообщение от Mike_Kharkov
Можете примеры привести на русском языке(не на инглише)?
(что бы описывалось, как именно решать данный вопрос с текстовой анимацией. Лично я найти этого не смог.)
с учётом того что информации по этой теме много, не закрытая и ищется в течении пары минут -это хамство как минимум. проще всего сказать "я не смог"
Или ,по вашему , всем информацию на блюдечке приносили? Нет, искали в интернете , в книгах -и это дело буквально часа полутора -чтоб всё найти

Последний раз редактировалось dmitriymar, 01.04.2013 в 21:26.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает анимация при загрузки ajax ArtOs Общие вопросы Javascript 0 24.05.2012 17:52
Анимация движения Armen Общие вопросы Javascript 8 02.08.2011 18:32
Анимация и управление строчкой текста INI jQuery 2 31.08.2010 08:22
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Цикличность анимация? SashaBorandi jQuery 1 25.12.2008 09:20