Задать вопрос
Android0
@Android0

Как можно зациклить скрипт?

Заранее, большое и человеческое спасибо!

/* 
	иницализация блика:
	el - элемент, к которому применяется эффект
	params - параметы:
		blikWidth - ширина блика
		blikAngle - угог наклона
		duration - продолжительность
 */
function blikInit(el, params) {

	var el = el,
			elH = el.height(),
			elW = el.innerWidth(),
			canvasForBlik;

	/* если блик к элементу еще не применялся
			добаялем canvas и скрываем текст
	*/
	if(el.find('canvas').length == 0)		
	{
		canvasForBlik = document.createElement('canvas');
		canvasForBlik.id = 'canvasBlik';
		el.wrapInner('<span style="opacity: 0; position: relative; z-index: 2"></span>');
		el.append(canvasForBlik);
		
		/* задаем размеры и позиционируем canvas */
		canvasForBlik.width=elW;
		canvasForBlik.height=elH;
	}
	else { // делать этого нет смысле
		canvasForBlik = document.getElementById('canvasBlik');
	}
	
	/* определяем параметры текста */
	var optFontName = el.css('fontFamily'),
			optFontSize = el.css('fontSize'),
			optFontColor = el.css('color'),
			optFontWeight = el.css('fontWeight'),
			optFontStyle = el.css('fontStyle'),
			optLineHeight = el.css('lineHeight'),
			optText = el.text();

	var ctx = canvasForBlik.getContext('2d');
	
			
	var blikWidth = params.blikWidth; // ширина блика
			
	/* 	создаем блик. тут же определяем его вид */
	var lineargradient = ctx.createLinearGradient(0,0,blikWidth,0);
			
	/* цвета блика */
	lineargradient.addColorStop(0, 'rgba(255, 255, 255, 0.5)'); 
	lineargradient.addColorStop(0.4, 'rgba(255, 255, 255, 1)');
	lineargradient.addColorStop(0.6, 'rgba(255, 255, 255, 1)'); 
	lineargradient.addColorStop(1, 'rgba(255, 255, 255, 0.5)'); 
	
	var blikAngle = params.blikAngle; // угол блика
			
	// параметры анимации
	var	anim,									// таймаут
		start,									// время старта
		now,										// текущее время
		duration = params.duration,							// продолжительность
		from = -20-blikWidth,					// стартовая позиция
		to = elW+blikWidth+20,					// финишная позиция
		progress = 0,								// прогресс анимации
		x;										// позиция в текущий момент времени
	
	// закон приращения аргумента (easing)
	function delta(param){
		return param;
	};
	
	// рендер
	function render(){
		now = new Date().getTime();
		progress = (now-start)/duration;
		x = (to - from)*delta(progress) + from;
		
		ctx.save();
		ctx.clearRect(0, 0, elW, elH);
		
		ctx.textBaseline = 'top';
		ctx.font = optFontStyle+' '+optFontWeight+' '+optFontSize+' '+optFontName;
		ctx.fillStyle = optFontColor;
		
		ctx.fillText(optText,0, 7);
		
		ctx.save();
		ctx.globalCompositeOperation = 'source-atop';
		ctx.translate(x, 0);
				
		ctx.fillStyle = lineargradient;
		ctx.rotate( blikAngle ); 
		ctx.fillRect(0,-50, blikWidth, elH+50);

		ctx.restore();
		
		// если не конец выполняем анимацию еще
		if (progress < 1) anim = setTimeout(arguments.callee, 0)
			// иначе заканчиваем анимацию
			else
			{
				clearTimeout(anim);
				progress = 0;
				el.find('canvas')
			};
	};
	
	start = new Date().getTime();
	render();
			
}

$(document).ready(function(){
  
	
blikInit($('h2'), {blikWidth: 100, blikAngle: Math.PI / 6, duration: 1500});

$('333').click(function()	{
	blikInit($('h2'), {blikWidth: 50, blikAngle: Math.PI / 6, duration: 800});
});
		
});
  • Вопрос задан
  • 481 просмотр
Подписаться 1 Оценить 1 комментарий
Решения вопроса 1
dart_kinselok
@dart_kinselok
Правильный вопрос содержит 50% искомого ответа...
Что вы конкретно подразумеваете под словом "зациклить"? Задать бесконечное количество итераций? В таком случае пихнуть это все в do ... while и в нужный момент нарушить условие while для остановки цикла о.о опять же,может не совсем правильно понял вопрос. А еще лучше воспользоваться setInterval(function, time). И все будет ОК:)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Через таймер обычно зацикливают анимацию в канвасе типа setInterval
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект