Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2018, 17:53
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Градиент в Javascript
Пробую сделать радугу, но в итоге выводит не радугу, а другие цвета, почему?

Код:
<!DOCTYPE html>
<html>
  <head>
    <title>Рисование прямоугольников</title>
    <script src='OSC.js'></script>
  </head>
  <body>
    <canvas id='mycanvas' width='640' height='240'></canvas>
    <script>
      canvas = O('mycanvas')
      context = canvas.getContext('2d')
      S(canvas).background = 'lightblue'
//Градиент сверху вниз 
//gradient = context.createLinearGradient(0, 0, 0, 270)
//Градиент слева направа
gradient = context.createLinearGradient(0, 0, 460, 0)
gradient.addColorStop(0.00, 'red')
gradient.addColorStop(0.14, 'orange')
gradient.addColorStop(0.28, 'yellow')
gradient.addColorStop(0.42, 'green')
gradient.addColorStop(0.56, 'blue')
gradient.addColorStop(0.70, 'indigo')
gradient.addColorStop(0.84, 'violet')
context.fillStyle = gradient
context.fillRect(285, 20, 135, 200)
    </script>
  </body>
</html>
Вместо радуги градиент получается как на фото ниже а должна быть радуга, делаю градиент на светло-снием фоне холста.
Изображения:
Тип файла: jpg Снимок.JPG (14.9 Кб, 2 просмотров)
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2018, 20:31
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Вроде с этим разобрался, пробую сделать радиальный градиент, даже попробовал пример на сайте http://dunaev.far.ru/examples/canv4.htm, но почему ничего не отображает.

Код:
<!DOCTYPE html>
<html>
 <head>
  <meta charset="utf-8">
  <title>Круг</title>
 </head>
 <body>
<canvas id="canvas" width="1000" height="1000" style="border:3px solid #d3d3d3;">
Your browser does not support the HTML5 canvas tag.</canvas>

<script>

function initdraw(){ //обработчик события onload элемента <body>
  x=0;
  dx=2;
  k=1;
  ctx = document.getElementById('canvas').getContext('2d');
  ctx.fillStyle="rgba(245,247,184,1)";//цвет заливки
  ctx.fillRect(0,0,430,120);//заливаем
  
  setInterval("draw()",100) // периодически вызываем draw()
}

function draw() {
  x=x+k*dx;
  if (x>300) k=-1;
  if (x<0) k=1;
  ctx.fillStyle="rgba(245,247,184,1)";//цвет заливки
  ctx.fillRect(0,0,120,120);
  // создаем радиальный градиент:
 var radgrad = ctx.createRadialGradient(50,55,10,57,60,30);
  radgrad.addColorStop(0, '#FF5F98');
  radgrad.addColorStop(0.8, '#FF0188');
  radgrad.addColorStop(1, 'rgba(255,1,80,0)');

  // рисуем шар:
  ctx.fillStyle = radgrad;
  ctx.fillRect(26,29,61,61);
  ctx.translate(k*dx,5*Math.cos(20*Math.PI*x/400)); // перемещаем холст
}
</script>
</body>
</html>
Прост пустой экран, почему не выводит шары код?
Ответить с цитированием
  #3 (permalink)  
Старый 22.11.2018, 21:02
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Все работает, в body событие Onload нужно было указать.
Решил попробовать градиент текста.. Вроде текст выводит, но буквы пустые с окантовкой, не залиты градиентом. Как их залить градиентом чтобы внутри букв не была пустота?

Код:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
		<style>
  .teststyle{
      padding: 5px;
	  box-shadow: 20px 20px 20px gray;
	  border:8px dashed brown;
	  border-radius: 50px; 
  }
</style>
        <title>Canvas в HTML5</title>
    </head>
    <body onload='draw()'>
<canvas class='teststyle' id='canvas' width='800' height='200'></canvas>

        <script>
var c=document.getElementById("canvas");
var ctx=c.getContext("2d");

ctx.font="20px Georgia";
ctx.strokeText("Hello World!",10,50);

ctx.font="80px bold Verdana";

// Создаем градиент
var gradient=ctx.createLinearGradient(0,0,c.width,0);
gradient.addColorStop("0","magenta");
gradient.addColorStop("0.5","blue");
gradient.addColorStop("1.0","red");

// Заполним градиентом
ctx.strokeStyle=gradient;

//Отступ слева, отступ сверху
ctx.strokeText("Добро пожаловать!",10,150);
  
        </script>
    </body>
</html>
Изображения:
Тип файла: jpg Снимок.JPG (39.4 Кб, 2 просмотров)
Ответить с цитированием
  #4 (permalink)  
Старый 22.11.2018, 21:34
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

super-html,
https://www.html5canvastutorials.com...text-tutorial/
Ответить с цитированием
  #5 (permalink)  
Старый 22.11.2018, 21:58
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

ОКазывается нужно использовать метод fillStyle с методом fillText и тогда заработало.

Код:
// Заполним градиентом
ctx.fillStyle=gradient;

//Отступ слева, отступ сверху
ctx.fillText("Добро пожаловать!",10,150);

Последний раз редактировалось super-html, 22.11.2018 в 22:09.
Ответить с цитированием
  #6 (permalink)  
Старый 22.11.2018, 22:20
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

super-html,
Ответить с цитированием
  #7 (permalink)  
Старый 24.11.2018, 18:32
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Есть текст Hello заполненный градиентом (в роли градиента - картинка). Нужно сделать обводку этого текста Hello красным цветом.

Тень вроде работает нормально, градиент с картинки заполняется, а вот обводки не получается сделать никак.. Есть функция которая делает обводку strokeStyle
Но она не работает и обводка не делается. В чем может быть проблема?

Я закоментировал эту строку которая должна сделать обводку, если откоментировать выпадает ошибка
Код:
Uncaught TypeError: context.strokeStyle is not a function
Вот весь код.

Код:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body>

<canvas id='test' width='1250px' height='600px'></canvas>

        <script>
image = new Image()

var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');	

image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
	
	context.font = '200px Verdana'
//Окантовка для букв 
    context.fillText('Hello', 0, 300);
	
	
    //Окантовка для букв
    context.strokeText('Hello', 0, 300);
	
};

image.src = '1.jpg';
	  //Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'

  //context.strokeStyle('red');
 
        </script>
    </body>
</html>
Изображения:
Тип файла: jpg Снимок.JPG (27.0 Кб, 0 просмотров)
Ответить с цитированием
  #8 (permalink)  
Старый 24.11.2018, 20:39
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Вот так сработало, только вот непонятно как сделать окантовку к примеру штрихпунтирной линией.

Код:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body>

<canvas id='test' width='1250px' height='600px'></canvas>

        <script>
image = new Image()

var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');	

image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
	context.strokeStyle='red'
	context.font = '200px Verdana'
//Окантовка для букв 
    context.fillText('Hello', 0, 300);
	
    //Окантовка для букв
    context.strokeText('Hello', 0, 300);
	
};

image.src = '1.jpg';
	  //Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'

  //context.strokeStyle('red');
  
 // ctx.fillStyle = 'lightblue';
//Заливаем фигуру голубым цветом
//ctx.fillRect(10, 10, 50, 50);
//Делаем окантовку красным цветом
//ctx.strokeStyle='red'
//ctx.strokeRect(10, 10, 50, 50);
 
        </script>
    </body>
</html>
Изображения:
Тип файла: jpg Снимок.JPG (28.1 Кб, 1 просмотров)

Последний раз редактировалось super-html, 24.11.2018 в 20:54.
Ответить с цитированием
  #9 (permalink)  
Старый 24.11.2018, 20:59
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Наконец-то нашел в документации..
Нужны всего 2 строки:

Код:
context.beginPath()
	context.setLineDash([10,10])
Ответить с цитированием
  #10 (permalink)  
Старый 25.11.2018, 00:38
Интересующийся
Отправить личное сообщение для super-html Посмотреть профиль Найти все сообщения от super-html
 
Регистрация: 20.09.2017
Сообщений: 22

Оформил все в функцию, пробую испытать метод который копирует с холста getImageData и вставить методом putImageData, но почему то ничего не происходит, копия вторая не делается.

Код:
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Canvas в HTML5</title>
    </head>
    <body onload='myImage()'>
<button onclick="copy()">Copy</button>
<canvas id='test' width='1000px' height='1000px'></canvas>

<script>
	function myImage(){
	image = new Image()
    var image = document.createElement('img'),
    context = document.getElementById('test').getContext('2d');		
    image.onload = function() {
    context.fillStyle = context.createPattern(image, 'no-repeat');
	context.strokeStyle='red'
	context.beginPath()
	context.lineWidth=5;
	context.setLineDash([5,5])
	context.font = '200px Verdana'
	//Заполнение для букв 
    context.fillText('Hello', 0, 200);
	
    //Окантовка для букв
   context.strokeText('Hello', 0, 200);
};

  image.src = '1.jpg';
//Сдвиг тени право
  context.shadowOffsetX = 50
  //Сдвиг тени вниз
  context.shadowOffsetY = 100
  //размытость
  context.shadowBlur = 15
  context.shadowColor = 'brown'
}
 
 function copy()
{
var imgData=context.getImageData(10,10,200,200);
context.putImageData(imgData,800,800);
} 
        </script>

    </body>
</html>
При нажатии на кнопку должна сделаться копия.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Книга: JavaScript. Сильные стороны Magneto Учебные материалы 16 21.04.2013 15:28
Интерпретатор Java на JS kobezzza Оффтопик 24 11.10.2012 18:32
Первый Moscow JavaScript Meetup korenyushkin Общие вопросы Javascript 0 26.07.2011 15:23
Последние книги по JavaScript! monolithed Учебные материалы 7 26.10.2010 19:40
Выдвет ошибку JavaScript Ромио Opera, Safari и др. 4 21.10.2010 20:34