var mouseDownListeners = [];
var mouseUpListeners = [];
var selStart = null;
var selEnd = null;
document.getElementById('button1').addEventListener('click', () => addEventListeners());
document.getElementById('button2').addEventListener('click', () => removeEventListeners());
function addEventListeners() {
removeEventListeners();
let rows = getRows();
rows.forEach((row, i) => {
let mouseUpListener = function(e) {
onMouseUp.bind(null, e, i)();
}
let mouseDownListener = function(e) {
onMouseDown.bind(null, e, i)();
}
mouseUpListeners[i] = mouseUpListener;
mouseDownListeners[i] = mouseDownListener;
row.addEventListener('mouseup', mouseUpListener);
row.addEventListener('mousedown', mouseDownListener);
})
}
function removeEventListeners() {
let rows = getRows();
rows.forEach((row, i) => {
row.removeEventListener('mouseup', mouseUpListeners[i]);
row.removeEventListener('mousedown', mouseDownListeners[i]);
})
mouseUpListeners = [];
mouseDownListeners = [];
}
function getRows() {
let rows = document.querySelectorAll('div.row');
return rows;
}
var onMouseDown = function(e, i) {
selStart = i;
}
var onMouseUp = function(e, i) {
selEnd = i;
assignClasses(selStart, selEnd);
selStart = null;
selEnd = null;
}
function assignClasses(start, end) {
let rows = getRows();
rows.forEach((row, i) => {
if (start <= i && i <= end) {
row.classList.add('highlighted-row');
} else {
row.classList.remove('highlighted-row');
}
})
}
.row {
border: 1px solid black;
user-select: none; // chrome and Opera
-moz-user-select: none; // Firefox
-webkit-text-select: none; // IOS Safari
-webkit-user-select: none; // Safari
}
.highlighted-row {
background-color: lightyellow;
}
<div>
<div>
<button id='button1'>Add listeners</button>
<button id='button2'>Remove listeners</button>
</div>
<div>
<div class='row'>Row1</div>
<div class='row'>Row2</div>
<div class='row'>Row3</div>
<div class='row'>Row4</div>
<div class='row'>Row5</div>
<div class='row'>Row6</div>
<div class='row'>Row7</div>
<div class='row'>Row8</div>
<div class='row'>Row9</div>
<div class='row'>Row10</div>
</div>
<div>
removeEventListener。 - marekful