我知道你没有提到 jQuery - 但是对于这种动态的东西,我认为使用它是非常可取的。
将整个交易包装在一个 div 中。
<div id="wordSelector"><spans></div>
然后将 mousedown 事件附加到 div。使用信号量确保仅在鼠标按下期间处理事件。捕获跨度上的 mouseover 事件,直到注册 mouseup 事件。
注意:这些事件可能需要附加到文档而不是 div 以确保处理 div 之外但进入 div 的 mousedown 事件,以及 mouseup 以及以防 mouseup 事件位于 div 之外。
var spansTouched = [];
var mouseDown = 0;
$("#wordSelector").mousedown( function(){
//track spans touched with a semaphore
mouseDown++;
});
$("#wordSelector").mouseup( function(){
mouseDown = 0;
//handle spansTouched and then reset it to []
});
$(".word").mouseover( function(){
if(mouseDown > 0){
spansTouched.push(this);
}
});
显然这里还有改进的余地,这只是为了强调一种使用信号量和鼠标事件的可能方法。