Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Не устанавливается цвет через style (https://javascript.ru/forum/events/42489-ne-ustanavlivaetsya-cvet-cherez-style.html)

cyber 29.10.2013 03:10

Не устанавливается цвет через style
 
Какаето невероятная хрень творить в скрипте.
Решил переписать свой color picker.
Проблема в том что когда перемещаю точку, то когда она сместилась на середину должен измениться цвет

НЕ работает только в хроме и опере на вебките, даже в гребаном ИЕ работает..

picker.on('DotMove', function (coords) {
  
   if (coords.y > 150) {

         this.style.borderColor = 'white';
     }


     else {


         this.style.borderColor = 'black';


     }
  
  });


и в атрибуте style все меняется, но цвет остается тот же , если не убрать из стилей
border: 1px solid black;

и потом прописывать в обработчике события так

picker.on('DotMove', function (coords) {
  
   if (coords.y > 150) {

         this.style.borderr = '1px solid white';
     }


     else {


         this.style.border = '1px solid black';


     }
  
  });


но это бред какой то так как стили заданные через style имеют преймущество перед стилями заданным через css

рабочие демо тут
Где я накосячил ?

П.с в консоли показывает что установлен нужный цввет, и больше нигде внутри скрипта не меняется цвет.

рони 29.10.2013 03:39

cyber,
если очень медленно перемещать то смена происходит.

cyber 29.10.2013 03:56

рони, у меня нет, да и всеравно такой вариант не радует...

danik.js 29.10.2013 05:13

Ну видимо глюк webkit. Не удивлен. В WebKit (blink) полно глюков. И обычно их никто не исправляют. Все работают над новыми фичами :)

cyber 29.10.2013 05:27

danik.js, проблема в том что в старой версии программы с ужасным кодом все работает на ура..

Deff 29.10.2013 10:11

cyber,
Прочти в консоли coords.y - может там формат не цифровой и нун перепарсить ?

cyber 29.10.2013 10:28

Deff, проверил как только увидел что не работает, да и если бы проблема была в этом условие не срабатывало бы, да и остальных браузерах не работалобы..

cyber 29.10.2013 10:39

иногда цвет становится нужный если переключить на другую вкладку и обратно, но потом так и остается белый *faceplam*

рони 29.10.2013 11:07

cyber,
может обрабатывать не все перемещения а дискретно раз в 50ms или только up и dn

cyber 29.10.2013 11:10

рони, возможно в этом была бы проблема если бы по клику срабатывала смена цвета, а так и по клику не работает.
А тут все работает на ура, но код там просто ужасный..

cyber 29.10.2013 13:54

И какие то непонятные подторможивания в хроме при перемещение, черт побери что они с хромом сделали...

cyber 30.10.2013 00:37

up, не могу найти решение хелп

danik.js 30.10.2013 01:02

setTimeout() тебя спасет!
Вобще. возьми на заметку такой финт - довольно часто выручает.

cyber 30.10.2013 01:21

danik.js,
не спас, я его изначально использовал, только забыл вернуть перед тем как демо первый раз выложить

danik.js 30.10.2013 01:43

Хром тридцатый на винде - работает (цвет меняется на середине)

<!DOCTYPE HTML>
<html>
  <head>
 
  <link rel='stylesheet' type='text/css' href='http://ru.lookatcode.com/show/5083176863845438/default.css'>

  <script src="http://ru.lookatcode.com/show/5083176863845438/picker.js"></script>
  

   </head>

  <body>

<div id='picker-contain' class='picker-contain'>


</div>
  
<script>
 

 var cont = document.getElementById('picker-contain');

 var picker = new Picker(cont, {
 	
    backColor: 'green',

 	canvas: {
 	
 	 picker: {
 		
 		width:300,
 		height:300
 	},

 	 tone: {

 	 	width:30,
 	 	height:300
 	 },

 	 dot: {
 	     width: 8,
         height:8
 	 }

 	}
 });


 picker.on('changedColor', function(params) {
    
 	//console.log(params.color);

 });


  picker.on('DotMove', function (coords) {
  
   if (coords.y > 150) {
         setTimeout(function(){
             this.style.borderColor = 'white';
         }.bind(this), 0);
     }


     else {

         setTimeout(function(){
             this.style.borderColor = 'black';
         }.bind(this), 0);


     }
  
  });




</script>

  </body>
</html>


Кстати при скролле координаты смещаются. И в хроме каретка вместо стрелочки при перетаскивании (фиксится через preventDefault() по mousedown)

cyber 30.10.2013 02:06

danik.js, хм, я тебя не так понял я думал ты имел ввиду обернуть mousemove
function onMousemove(e) {


      setTimeout(function () {

          setCoords(e, canvas, offsetElem, shift);
          

      }, 5);

  };


и да , работает не совсем правильно так как не всегда цвет меняеться при резком движении..

cyber 30.10.2013 02:07

Цитата:

Сообщение от danik.js
Кстати при скролле координаты смещаются. И в хроме каретка вместо стрелочки при перетаскивании (фиксится через preventDefault() по mousedown)
__________________

хм, чет забыл про то что координаты учитываются без учета скрола, сенк.


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