JSFiddle - React, Tailwind, and code Playground

by Svetlana000

HTML

<div>
  <div class="btn btn1 source source-1">
     111
  </div>
  <div class="btn btn2 source source-2">
     222
  </div>
</div>
<div class="target target-1">
  <div class="item blue"></div>
   <div class="item red"></div>
   <div class="item yellow"></div>
</div>
<div class="target target-2">
  <div class="item blue"></div>
   <div class="item black"></div>
   <div class="item green"></div>
</div>

CSS

.btn{
  width: 100px;
  height: 100px;
  background: #018CB4;
  border-radius: 50%;
  cursor:pointer;
  display: flex;
  justify-content: center;
  align-items: center;
  position: absolute;
}
.btn1{
  box-shadow: 0px 4px 40px rgba(0, 0, 0, 0.8);
    top: 60px;
    left: 30px;
    z-index: 9;

}
.btn2{
    top: 20px;
    left: 100px;
}
.hidden {
  display: none
}
.target{
  margin-top: 200px;
}
.item{
  width: 50px;
  height:50px;
}
.blue{
  background:blue;
}
.red{
  background:red;
}
.yellow{
  background:yellow;
}
.black{
  background:black;
}
.green{
  background:green;
}

JavaScript

var HIDDEN_CLASS_NAME = 'hidden'
var TARGET_CLASS_NAME = 'target'
var SOURCE_CLASS_NAME = 'source'

var targetIdToShow = 1

function main() {
	var targets = getElements(TARGET_CLASS_NAME)
	var sources = getElements(SOURCE_CLASS_NAME)
	sources.forEach(function (sourceNode) {
		var sourceNodeId = extractId(sourceNode, SOURCE_CLASS_NAME)
		sourceNode.addEventListener('click', function () {
			showTarget(targets, sourceNodeId)
		})
	})
	showTarget(targets, targetIdToShow)
}

function getElements(type) {
	return [].slice.call(document.querySelectorAll('.' + type)).sort(function (targetNode1, targetNode2) {
		var target1Num = extractId(targetNode1, TARGET_CLASS_NAME)
		var target2Num = extractId(targetNode2, TARGET_CLASS_NAME)
		return target1Num > target2Num
	})
}

function extractId(targetNode, baseClass) {
	var currentClassIndex = targetNode.classList.length
	while (currentClassIndex--) {
		var currentClass = targetNode.classList.item(currentClassIndex)
		var maybeIdNum = parseInt(currentClass.split('-')[1])
		if (isNaN(maybeIdNum)) {
			continue
		}
		var classStrinToValidate = baseClass + '-' + maybeIdNum
		if (classStrinToValidate === currentClass) {
			return maybeIdNum
		}
	}
}

function showTarget(targets, targetId) {
	targets.forEach(function (targetNode, targetIndex) {
    var currentTargetNodeId = extractId(targetNode, TARGET_CLASS_NAME)
		if (currentTargetNodeId === targetId) {
			targetNode.classList.remove(HIDDEN_CLASS_NAME)
		} else {
			targetNode.classList.add(HIDDEN_CLASS_NAME)
		}
	})
}

main()