Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Градиент генератор (https://javascript.ru/forum/misc/44176-gradient-generator.html)

h1rurg911 09.01.2014 20:58

Градиент генератор
 
Здравствуйте, прошел курс по JS и JQuery решил попрактиковаться и создать копию этого сервиса http://www.css3factory.com/linear-gradients/
помогите плз разобраться как работает кнопка "Add", я не понимаю как этот переключатель сохраняет значение полей "colorpicker" при этом создав новый градиент его значения обнуляются. Что прописать в гугле что бы почитать понятия не имею. Вот что имею на данный момент.

<!DOCTYPE html>
<html>
	<head>
		<title>ColorService</title>
		<meta http-equiv="content-type" content="text/html; charset=utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<link type="text/css" rel="stylesheet" href="css/colpick.css" media="all">
		<link type="text/css" rel="stylesheet" href="css/bootstrap.css" media="all">
		<link type="text/css" rel="stylesheet" href="css/bootstrap-responsive.css" media="all">
		<link type="text/css" rel="stylesheet" href="css/style.css" media="all">
		<script src="js/jquery-1.10.2.min.js"></script>
		<script src="js/bootstrap.js"></script>
		<script src="js/colpick.js"></script>
		<script src="js/color.js"></script>
	</head>
	
 <body>
	 <div class="container" id="main">
	<div class="row">
		<div class="span8" id="picker"></div>
		<div class="span4" id="grad"></div>
	</div>
	
	<div class="row">
		<div class="span12" id="csscode"></div>
	</div>
	
	
	</div>
 </body>
</html>


$(document).ready(function(){
	$('#picker').colpick({
		flat:true
	});

		var grad = $('#grad'),
			mycol = $('.mycol'),
			move = $(".colpick_selector_inner, .colpick_hue_arrs"),
			csscode = $("#csscode"),
			myhex;
			csscode.html("background-image: -webkit-gradient(</br><p>linear,</br>left top,</br>left bottom,</br>color-stop(0, #3289c7),</br>color-stop(1, #76FF85)</p>);</br>background-image: -o-linear-gradient(bottom, #3289c7 0%, #76FF85 100%);</br>background-image: -moz-linear-gradient(bottom, #3289c7 0%, #76FF85 100%);</br>background-image: -webkit-linear-gradient(bottom, #3289c7 0%, #76FF85 100%);</br> background-image: -ms-linear-gradient(bottom, #3289c7 0%, #76FF85 100%);</br>background-image: linear-gradient(to bottom, #3289c7 0%, #76FF85 100%);");
	
	
		move.mousemove(function(){
		
			myhex = mycol.val();
			grad.css({
				'background-image' : '-webkit-gradient(linear,left top,left bottom,color-stop(0, #'+ myhex +'),color-stop(1, #FFDA2E))',
				'background-image' : '-o-linear-gradient(bottom, #'+ myhex +' 0%, #FFDA2E 100%)',
				'background-image' : '-moz-linear-gradient(bottom, #'+ myhex +' 0%, #FFDA2E 100%)',
				'background-image' : '-webkit-linear-gradient(bottom, #'+ myhex +' 0%, #FFDA2E 100%)',
				'background-image' : '-ms-linear-gradient(bottom, #'+ myhex +' 0%, #FFDA2E 100%)',
				'background-image' : 'linear-gradient(to bottom, #'+ myhex +' 0%, #FFDA2E 100%)',
			});
			csscode.html("background-image: -webkit-gradient(</br><p>linear,</br>left top,</br>left bottom,</br>color-stop(0, #"+ myhex +"),</br>color-stop(1, #76FF85)</p>);</br>background-image: -o-linear-gradient(bottom, #"+ myhex +" 0%, #76FF85 100%);</br>background-image: -moz-linear-gradient(bottom, #"+ myhex +" 0%, #76FF85 100%);</br>background-image: -webkit-linear-gradient(bottom, #"+ myhex +" 0%, #76FF85 100%);</br> background-image: -ms-linear-gradient(bottom, #"+ myhex +" 0%, #76FF85 100%);</br>background-image: linear-gradient(to bottom, #"+ myhex +" 0%, #76FF85 100%);");
		});

});

Опан 11.01.2014 12:27

А просто использовать <input type=color> пробовали? Смысл такой же. Пример есть здесь: http://raya.16mb.com/risovalka/index.php правее надписи «выберите цвет».

h1rurg911 11.01.2014 21:10

Да, это вполне адекватное решение, а потом по клику добавлять инпуты, но тут дело не в том, мне как бы этот сервис не нужен, это так для себя для практики, я пробую реализовать так: каждая единица градиента (каждый этот кубик где "add") это функция, и при работе этой функции значение колорпикера записываются в массив, а при клике на нужный кубик подставляются ранние записные значение. Я только начал программировать, вообще в потерях)

Опан 11.01.2014 22:34

Для получения практики можете проанализировать ещё такой код:
<input type=color onchange="mas.push(this.value);showmas()">

<script>
mas=[];

function showmas(){
	alert("В массиве сейчас "+mas.length+" ячеек, содержащих уникальный цвет");
	for(i=0;i<mas.length;i++){
		alert("Цвет № "+(i+1)+" = "+mas[i]);
	}
}

</script>

h1rurg911 11.01.2014 23:59

Я делаю примерно так как Вы написали, только через jQuery
записываю в массив (записываю по событию mousemove, потому что, на события change инпуты этого плагина почему то не реагируют) :
move.mousemove(function (){
			colpickInput.each(function(){
				value = $(this).val()
				swarr = new Array()
				swarr.push(value2) 
			});

а вот так, подставляю значение с массива:
colpickInput.each(function(index){
		$(this).val(swarr[index])
		
	})

Но у меня проблема в другом, например выбрал я первый цвет, поводил мышкой, значения записались в массив arr1, нажал на второй цвет - вызвалась функция которая начала запись в массив arr2, но толку, ведь первая функция продолжает свою роботу, и также пишет все значение инпутов, там пофигу что я уже кликнул на 2 цвет. Вот и задача, как сделать такую переключалку, что бы я кликнул на 2 цвет, запись в первый массив остановилась, а началась во второй, ну и наоборот. Кароч я уже себе сломал голову, на грани уже)

рони 12.01.2014 00:14

h1rurg911,
алгоритм - есть индекс - клик по маленькому квадратику устанавливает этот индекс - colorpicker пишет только на этот индекс - кнопка add увеличивает общее количество индексов length - так ферштейн?

h1rurg911 12.01.2014 00:23

А как установить эти индекс, об’ясните плз, или подскажите где почитать

рони 12.01.2014 00:33

h1rurg911,
индекс -- это любая переменная хранящая либо ссылку на маленький квадратик либо число по которому можно найти этот квадратик - в самом квадратике навесить клик по которому он запишет свои данные - данные этого квадратика в индекс.

рони 12.01.2014 02:08

h1rurg911,
для медитации ... вместо colorpicker ползунок ... кликаем на любой 'квадратик', на ползунок, на кнопку 'add' :write:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
   #plus {
          color: #000080;
          background: #E9985D;
          border-radius: 8px;
          display: inline-block;
          margin: 5px;}
   #mas div {
          text-align: center;
          width: 24px;
          cursor: default;
          border-radius: 4px;
          display: inline-block;
          margin: 8px;
          padding: 4px;
          color:#FFFF00;
          background: #FFA500;
          opacity: 0;
          -moz-transition: all 1.5s;
          -o-transition: all 1.5s;
          -webkit-transition: all 1.5s;
          transition: all 1.5s;
      }
   body{
          background: #7B68EE;
          font-size: 24px;
   }
  </style>
</head>

<body>
<div id="mas"></div>
<input type="button" id = 'plus' value="add" />
<input type='range' id = 'rang'  value = 70 />
<script>
   var index;
   var rng = document.querySelector('#rang');
   var mas = document.querySelector('#mas');
   var pls = document.querySelector('#plus');
   rng.onchange = color;
   pls.onclick = add;

   function color() {
       index && (index.innerHTML = this.value)
   }

   function init() {
       index && (index.style.backgroundColor = '');
       this.style.backgroundColor = '#0000CD';
       rng.value = this.innerHTML;
       index = this
   }

   function add() {
       var d = document.createElement("div");
       d.onclick = init;
       var a = Math.floor(Math.random() * 100);
       d.innerHTML = a;
       mas.appendChild(d);
       d.onclick();
       d.clientWidth;
       d.style.opacity = 1;
   };
   add();
   add();
</script>
</body>

</html>

h1rurg911 12.01.2014 14:02

Спасибо большое!! еще не понял как все работает, но думаю что пойму)


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