Клуб API Карт

Как сделать кнопку без состояния "нажата"

Пост в архиве.
как сделать что бы button было простой кнопкой без состояния вкл. выкл. Грубо говоря чтоб нажимал и срабатывало событие и все ?
22 комментария

наверное можно при обработке нажатия делать deselect()

орригинально ))) ну да ладно ))))
Тимофей Соловейчик
28 января 2016, 04:54

А почему у меня на кнопке смещается изображение?

http://lunniydvorec.ru/KOHTAKTbl-test.html

Тоже этот вопрос задавал
сделал так:

.buttoncss {margin-top:6px;}

bya3=new ymaps.control.Button({
      data:{
       content: '< img src=/img/ya3.png class=buttoncss >',
       title: 'Линейка'
      }}
     );

по другому не нашел как....
Тимофей Соловейчик
28 января 2016, 04:54

Шикарнецки :) спасибки

а какое событие должно срабатывать - click или select?

Сейчас можно либо кидаться deselectами на селекты.

либо сказать button.select = function () {} - и ловить клики. железный способ.

 

да я все понимаю - просто сейчас у вас по факту буттон вовсе не буттон а скерее чек бокс ) хотелось бы что бы буттон был буттоном )))

Угу, только вот checkbox как-раз ведет себя именно как ты хочешь :)

Автовключение ему надо включать.

Еще один 100% вариант, кстати, button.isEnabled = function(){ return false;}

В общем будем колдовать.

Да я не про функции обработки ) а про визуальный вид.Спасибо за внимание. По навителовским тайлам, то что не подключаются  так и не разобрались ?

В процессе. Очень уж необычная бага.

Так, добралась наконец до вашего случая. Дело оказалось вот в чем.

NavitelLayer = function () {

            return new ymaps.Layer(

                function (tile, zoom) {

                    nl='';

                    if (zoom==6) {tile[1]=63-tile[1];  nl='0000'; zoom='06';};

                    if (zoom==7) {tile[1]=127-tile[1]; nl='0000'; zoom='07';};

                    if (zoom==8) {tile[1]=255-tile[1]; nl='000'; zoom='08';};

                    if (zoom==9) {tile[1]=511-tile[1]; nl='000'; zoom='09';};

                    if (zoom==10) {tile[1]=1023-tile[1]; nl='000';};   

                    if (zoom==11) {tile[1]=2047-tile[1]; nl='00';};   

                    if (zoom==12) {tile[1]=4095-tile[1]; nl='00';};  

                    if (zoom==13) {tile[1]=8191-tile[1]; nl='00';};  

                    if (zoom==14) {tile[1]=16383-tile[1]; nl='0';};  

                    if (zoom==15) {tile[1]=32767-tile[1]; nl='0';};  

                    if (zoom==16) {tile[1]=65535-tile[1]; nl='0';}; 

                    if (zoom==17) {tile[1]=131071-tile[1]; nl='0';}; 

                    return 'http://map.navitel.su/navitms.fcgi?t='+nl+'00'+tile[0]+','+nl+'00'+tile[1]+','+zoom;

                }, { 

                projection: ymaps.projection.sphericalMercator

            });

        }

 

В эту функцию приходили номера тайлов, которые надо показать на карте. Вы эти номера перетирали и дальше апи сходило с ума.

 

Лечится просто - копируем пришедшие данные, чтобы ничего не потерялось

NavitelLayer = function () {

            return new ymaps.Layer(

                function (tileNumber, zoom) {

                    var tile = tileNumber.slice();

                    nl='';

                    if (zoom==6) {tile[1]=63-tile[1];  nl='0000'; zoom='06';};

                    if (zoom==7) {tile[1]=127-tile[1]; nl='0000'; zoom='07';};

                    .....

И все заработает.

бугагашечка, конечно.

Марин я может сделать чтобы АПИ передавало в эту функцию копию тайлового массива? Чтобы обезапасить себя и пользователей от подобных ситуаций?

или подразумавается что этот массив кому-то может понадобиться менять?

 

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

ок. ты права

Все отлично заработало. Один вопрос - как наложить на одну карту прозрачные тайлы другой карты в одной проекции (А может и в разных если есть? :)

Можно живой примерчик - а то опять ничего найти не могу - подсознательно понимаю что свойствами layer.tileTransparent

но вот именно как одни тайлы на другие - вопрос...

скажите пожалуйста

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

 

layer.options.set({

    tileTransparent: true,

    zIndex: 300

});

 

нет, не порядок, как на свой растровый слой подключить прозрачный слой?

Давайте разберемся.

У вас есть одна карта.

Вы хотите поверх нее положить слой других прозрачных тайлов, так?

Именно. Грубо говоря хочу навителовские пробки (из прозрачных тайлов) наложить на свои тайлы

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

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

http://habrahabr.ru/post/142930/

Все равно не получается....


//СЛОЙ NAVITEL
NavLayer = function () {
return new ymaps.Layer(
  function (tilen, zoom) {
   var tile = tilen.slice();
   nl='';
   if (zoom==6) {tile[1]=63-tile[1];  nl='0000'; zoom='06';};
   if (zoom==7) {tile[1]=127-tile[1]; nl='0000'; zoom='07';};
   if (zoom==8) {tile[1]=255-tile[1]; nl='000'; zoom='08';};
   if (zoom==9) {tile[1]=511-tile[1]; nl='000'; zoom='09';};
   if (zoom==10) {tile[1]=1023-tile[1]; nl='000';};   
   if (zoom==11) {tile[1]=2047-tile[1]; nl='00';};   
   if (zoom==12) {tile[1]=4095-tile[1]; nl='00';}; 
   if (zoom==13) {tile[1]=8191-tile[1]; nl='00';}; 
   if (zoom==14) {tile[1]=16383-tile[1]; nl='0';}; 
   if (zoom==15) {tile[1]=32767-tile[1]; nl='0';}; 
   if (zoom==16) {tile[1]=65535-tile[1]; nl='0';};
   if (zoom==17) {tile[1]=131071-tile[1]; nl='0';};
   return 'http://map.navitel.su/navitms.fcgi?t='+nl+'00'+tile[0]+','+nl+'00'+tile[1]+','+zoom;
  }, {
   projection: ymaps.projection.sphericalMercator,
   zIndex: 299
  }
)
};
ymaps.layer.storage.add('my#navitel', NavLayer);   
ymaps.mapType.storage.add('my#navitel', new ymaps.MapType('Navitel', ['my#navitel']));


//СЛОЙ NAVITEL ПРОБКИ
NavPLayer = function () {
return new ymaps.Layer(
  function (tilen, zoom) {
   var tile = tilen.slice();
   nl='';
   if (zoom==6) {tile[1]=63-tile[1];  nl='0000'; zoom='06';};
   if (zoom==7) {tile[1]=127-tile[1]; nl='0000'; zoom='07';};
   if (zoom==8) {tile[1]=255-tile[1]; nl='000'; zoom='08';};
   if (zoom==9) {tile[1]=511-tile[1]; nl='000'; zoom='09';};
   if (zoom==10) {tile[1]=1023-tile[1]; nl='000';};   
   if (zoom==11) {tile[1]=2047-tile[1]; nl='00';};   
   if (zoom==12) {tile[1]=4095-tile[1]; nl='00';}; 
   if (zoom==13) {tile[1]=8191-tile[1]; nl='00';}; 
   if (zoom==14) {tile[1]=16383-tile[1]; nl='0';}; 
   if (zoom==15) {tile[1]=32767-tile[1]; nl='0';}; 
   if (zoom==16) {tile[1]=65535-tile[1]; nl='0';};
   if (zoom==17) {tile[1]=131071-tile[1]; nl='0';};
   return 'http://map.navitel.su/navitms.fcgi?j='+nl+'00'+tile[0]+','+nl+'00'+tile[1]+','+zoom+','+rnd;
  }, {
   projection: ymaps.projection.sphericalMercator,
   tileTransparent: true,
   zIndex: 300
  }
)
};
ymaps.layer.storage.add('my#navitelp', NavPLayer);   
ymaps.mapType.storage.add('my#navitelp', new ymaps.MapType('Пробки', ['my#navitelp']));


вот так делаю - все равно выводятся только пробки....