Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2016, 23:10
Интересующийся
Отправить личное сообщение для Enkille Посмотреть профиль Найти все сообщения от Enkille
 
Регистрация: 09.11.2015
Сообщений: 19

Как улучшить данный код? (не могу разобраться)
Подскажите, как исправить данный код, чтобы на разрешении меньше 960px по клику на BTN срабатывал event и показывался BLOCK, а при повторном клике на BTN срабатывал снова event на Display:NONE.

Долго ковырялся в данном коде, но ничего путного не вышло. Работает только display:block, а обратно по клику block не закрывается (display:none). Прошу вашей помощи.

(function(){
  var btn = document.querySelector(".gruppi-toggle");
  var block = document.querySelector(".speciali-gruppi-window");

  if (window.screen.width < 960){
    btn.addEventListener("click", function(){block.style.display = "block";});
    btn.addEventListener("click", function(){block.style.display = "none";});
  }
})();


P.S. код немного уменьшил, т.к. у меня есть второй if, на разрешение больше 960 и click\mouseLeave - там все ок.
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2016, 23:59
Аспирант
Отправить личное сообщение для Madzal Посмотреть профиль Найти все сообщения от Madzal
 
Регистрация: 18.02.2016
Сообщений: 62

(function(){
  var btn = document.querySelector(".gruppi-toggle");
  var block = document.querySelector(".speciali-gruppi-window");

  if (window.screen.width < 960){
 
  btn.addEventListener("click", function(){
 document.clicked = !document.clicked >>> 0;
  if(document.clicked) {
block.style.display = "block";
}}
else{
  block.style.display = "none";;
  })();

Последний раз редактировалось Madzal, 17.03.2016 в 00:02.
Ответить с цитированием
  #3 (permalink)  
Старый 17.03.2016, 00:05
hhh hhh вне форума
Профессор
Отправить личное сообщение для hhh Посмотреть профиль Найти все сообщения от hhh
 
Регистрация: 19.11.2013
Сообщений: 150

<button class="gruppi-toggle">
Click
</button>
<div class="speciali-gruppi-window" style="display: block">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor ratione, pariatur obcaecati veritatis eum sit. Expedita quas suscipit esse aspernatur sint veritatis eius, dolores, architecto voluptate tempore illo itaque, eligendi.</div>

<script>
(function(){
  var btn = document.querySelector(".gruppi-toggle");
  var block = document.querySelector(".speciali-gruppi-window");
  
   if (window.screen.width < 960){
    btn.addEventListener("click", function() {
      if (block.style.display == "block") {
        block.style.display = "none";
      }
      else {
        block.style.display = "block";
      }
    });
   }
})();

</script>
Ответить с цитированием
  #4 (permalink)  
Старый 17.03.2016, 04:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

.gruppi-toggle.hidden {
   display: none;
}

(function(){
    var btn = document.querySelector('.gruppi-toggle');
        block = document.querySelector('.speciali-gruppi-window');

    if(window.screen.width < 960) {
        btn.onclick = block.classList.toggle.bind(block, 'hidden');
    }
})();

Последний раз редактировалось ruslan_mart, 17.03.2016 в 04:59.
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2016, 13:27
Интересующийся
Отправить личное сообщение для Enkille Посмотреть профиль Найти все сообщения от Enkille
 
Регистрация: 09.11.2015
Сообщений: 19

Спасибо всем отписавшимся, Ruslan_xDD только сейчас увидел ваш вариант.
Воспользовался вышестоящим. Код получился следующим: как считаете можно улучшить? Чтобы не обращаться к каждому элементу по ключу и плодить код?
(function(){
        var btn = document.querySelectorAll(".gruppi-toggle"), block = document.querySelectorAll(".speciali-gruppi-window");
        if (window.screen.width < 960){
          btn[0].addEventListener("click", function(){
            if (block[0].style.display == "none") {
              block[0].style.display = "block";
            }else {
              block[0].style.display = "none";
            }
          });
          btn[1].addEventListener("click", function(){
            if (block[1].style.display == "none") {
              block[1].style.display = "block";
            }else {
              block[1].style.display = "none";
            }
          });
        }if (window.screen.width > 960){
          btn[0].addEventListener("click", function(){block[0].style.display = "block";});
          block[0].addEventListener("mouseleave", function(){block[0].style.display = "none";});
          btn[1].addEventListener("click", function(){block[1].style.display = "block";});
          block[1].addEventListener("mouseleave", function(){block[1].style.display = "none";});
        }
      })();
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2016, 14:29
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

.gruppi-toggle.hidden {
   display: none;
}


(function(){
	function handler(event, method, current, target) {
		current['on' + event] = current.classList[method].bind(target || current, 'hidden');
	};
	
	var btn = document.querySelectorAll('.gruppi-toggle'),
		block = document.querySelectorAll('.speciali-gruppi-window'),
		screenIsMin = window.screen.width < 960,
		i, method = screenIsMin ? 'toggle' : 'remove';
	
	for(i = 0; i < btn.length; i++) {
		handler('click', method, btn[i], block[i]);
		if(!screenIsMin) {
			handler('mouseleave', 'add', block[i]);
		}
	}
})();
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2016, 18:48
Интересующийся
Отправить личное сообщение для Enkille Посмотреть профиль Найти все сообщения от Enkille
 
Регистрация: 09.11.2015
Сообщений: 19

Сообщение от Ruslan_xDD Посмотреть сообщение
.gruppi-toggle.hidden {
   display: none;
}


(function(){
	function handler(event, method, current, target) {
		current['on' + event] = current.classList[method].bind(target || current, 'hidden');
	};
	
	var btn = document.querySelectorAll('.gruppi-toggle'),
		block = document.querySelectorAll('.speciali-gruppi-window'),
		screenIsMin = window.screen.width < 960,
		i, method = screenIsMin ? 'toggle' : 'remove';
	
	for(i = 0; i < btn.length; i++) {
		handler('click', method, btn[i], block[i]);
		if(!screenIsMin) {
			handler('mouseleave', 'add', block[i]);
		}
	}
})();
Благодарю вас, отличное решение! По своему же (т.е. вашему) коду получился.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите как работает данный код Victor031 Общие вопросы Javascript 4 10.02.2015 08:12
Как подгрузить код JS динамически? zhurchik Общие вопросы Javascript 22 02.02.2015 14:16
Не могу разобраться, как работает функция Dionid Общие вопросы Javascript 4 21.06.2014 18:14
Как писать код который легко поддерживать, расширять, читать. Policeman Общие вопросы Javascript 3 24.03.2012 05:40
Как получит ссылку на элемент внутри которого запустили JS код? aRpi Events/DOM/Window 20 02.10.2011 13:36