色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 框選

javascript中實(shí)現(xiàn)框選的功能非常常見,可以用于選擇一段文本,或者選擇一個(gè)區(qū)域內(nèi)的元素,提供用戶更便利的操作體驗(yàn)。

框選的實(shí)現(xiàn)方式一般是監(jiān)聽鼠標(biāo)的mousedown、mousemove、mouseup這三個(gè)事件,記錄鼠標(biāo)按下時(shí)的坐標(biāo),移動(dòng)時(shí)的坐標(biāo),以及鼠標(biāo)松開時(shí)的坐標(biāo),然后計(jì)算出選擇框的坐標(biāo)和尺寸,通過CSS屬性設(shè)置選擇框的樣式。

let start, end, x, y, w, h;
let isSelecting = false;
const container = document.querySelector('.container');
container.addEventListener('mousedown', (e) =>{
if (e.button !== 0) return;
isSelecting = true;
start = [e.clientX, e.clientY];
});
container.addEventListener('mousemove', (e) =>{
if (!isSelecting) return;
end = [e.clientX, e.clientY];
const [left, top] = [start[0]< end[0] ? start[0] : end[0], start[1]< end[1] ? start[1] : end[1]];
x = left + window.pageXOffset;
y = top + window.pageYOffset;
w = Math.abs(start[0] - end[0]);
h = Math.abs(start[1] - end[1]);
selectBox.style.left = x + 'px';
selectBox.style.top = y + 'px';
selectBox.style.width = w + 'px';
selectBox.style.height = h + 'px';
});
container.addEventListener('mouseup', (e) =>{
if (e.button !== 0) return;
isSelecting = false;
// do something with selected area
});

在選擇框的基礎(chǔ)上,我們可以實(shí)現(xiàn)一些常用的功能,比如框選文本、框選元素。下面分別介紹。

框選文本

let selectedText = '';
document.addEventListener('mouseup', () =>{
selectedText = window.getSelection().toString();
});

可以通過監(jiān)聽document上的mouseup事件,在鼠標(biāo)釋放時(shí)獲取選擇的文本內(nèi)容,同時(shí)也可以與選擇框結(jié)合使用。

框選元素

const elements = document.querySelectorAll('.element');
const selectedElements = [];
document.addEventListener('mouseup', () =>{
elements.forEach((element) =>{
const bcr = element.getBoundingClientRect();
const [left, top] = [bcr.left + window.pageXOffset, bcr.top + window.pageYOffset];
const [elementX, elementY] = [left + (bcr.width / 2), top + (bcr.height / 2)];
if (elementX >x && elementX< x + w && elementY >y && elementY< y + h) {
selectedElements.push(element);
}
});
});

可以通過獲取元素的位置信息,判斷元素是否被框選到。

總的來說,實(shí)現(xiàn)一個(gè)簡(jiǎn)單的框選功能并不難,但在實(shí)際使用中需要考慮到各種情況,比如多次框選、單次框選、選擇框樣式等等,以提供穩(wěn)定且靈活的操作體驗(yàn)。