Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2019, 11:39
Кандидат Javascript-наук
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 106

Чтобы менялся цвет у той ячейки, на которую кликнули (а у остальных удалялся)
При клике на ячейку у нее меняется цвет (добавляется класс).
Как сделать чтобы цвета у других ячеек исчезали (если они есть), а цвет менялся только у той ячейки, на которую кликнули?

https://codepen.io/yaparoff/pen/MWYbWMV
Ответить с цитированием
  #2 (permalink)  
Старый 16.12.2019, 12:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от yaparoff
Как сделать чтобы цвета у других ячеек исчезали (если они есть), а цвет менялся только у той ячейки, на которую кликнули?
Как вариант...
<style type='text/css'>
.cell {
  width: 80px;
  height: 60px;
  border: 1px solid #000;
  cursor: pointer;
}
.row {
  display: flex;
}
.on {
  background-color: red;
}
</style>
<div class="row">
	<div class="cell" data-sort='0'></div>
	<div class="cell" data-sort='0'></div>
	<div class="cell" data-sort='0'></div>
</div>
<script type='text/javascript'>
var o=document.getElementsByClassName('row');
o[0].addEventListener('click',function(e){
	var oc=e.target.classList;
	if (oc.contains('cell')) {
		var el=e.target.parentNode.querySelectorAll('.cell.on')
		for (var i=0; i<el.length; i++) {
			el[i].classList.remove('on');
		};
		oc.add('on');
	};
});
</script>
Ответить с цитированием
  #3 (permalink)  
Старый 16.12.2019, 13:22
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

ksa, чтобы не перебирать постоянно ячейки, коих может быть много, можно делегировать обработку родителю, в который записывать объект активный, при щелчке по другому объекту у сохраненного удаляется класс.
Ответить с цитированием
  #4 (permalink)  
Старый 16.12.2019, 14:02
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от laimas
чтобы не перебирать постоянно ячейки, коих может быть много, можно
Я "перебираю" только нужные мне. Ничего лишнего.
Ответить с цитированием
  #5 (permalink)  
Старый 16.12.2019, 14:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

делегирование зависимые клики
yaparoff,
на основе варианта от Malleys
<!DOCTYPE html>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
.cell {
  width: 80px;
  height: 60px;
  border: 1px solid #000;
  cursor: pointer;
  background-color: var(--bg-color, '')
}

.row {
  display: flex;
  margin: 20px auto;
}

  </style>
  <script>
const classNames = ['', 'yellow', 'red'];
document.addEventListener("click", event => {
    const cell = event.target.closest(".row > .cell");
    if(cell) {
        const root = cell.parentNode;
        if(root._lastCell) root._lastCell.style.setProperty('--bg-color', '');
        if(root._lastCell != cell) root._current = 0;
        root._current = (root._current + 1) % classNames.length;
        root._lastCell = cell;
        root._lastCell.style.setProperty('--bg-color', classNames[root._current])
    }
});

  </script>
</head>
<body>
<div class="row">
  <div class="cell"></div>
  <div class="cell"></div>
  <div class="cell"></div>
</div>
<div class="row">
  <div class="cell"></div>
  <div class="cell"></div>
  <div class="cell"></div>
</div>
</body>
</html>

Последний раз редактировалось рони, 17.12.2019 в 14:45.
Ответить с цитированием
  #6 (permalink)  
Старый 17.12.2019, 14:42
Кандидат Javascript-наук
Отправить личное сообщение для yaparoff Посмотреть профиль Найти все сообщения от yaparoff
 
Регистрация: 26.04.2016
Сообщений: 106

В общем ни одно из решений не подошло. Написал сам то что мне нужно.
https://codepen.io/yaparoff/pen/MWYbWMV
Всем спасибо!
Ответить с цитированием
  #7 (permalink)  
Старый 17.12.2019, 14:44
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

yaparoff, я тебе пример показал, а не решение...
Ответить с цитированием
  #8 (permalink)  
Старый 17.12.2019, 14:46
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

yaparoff,
посмотрите пост #5 снова.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что тут изменить, чтобы цвет поля менялся colorpicker nikki4 Элементы интерфейса 0 08.05.2012 23:20