Обнаружение погоды пользователь нажал на текст или пробел внутри текстовой области

#javascript #html #textarea

#javascript #HTML #текстовая область

Вопрос:

У меня есть текстовая область, которую можно перемещать, в которой текст все равно можно выбирать, перетаскивая его. Для того, чтобы отличить «перетаскивание текста» от «перетаскивания перемещения», я должен знать, что точка, с которой пользователь начал перетаскивание (т. Е. Положение наведения курсора мыши), была пробелом или текстом.

Единственное, что я могу придумать, чтобы выяснить это, — это вычисление с использованием ширины символа и высоты строки, чего я хотел бы избежать.

Комментарии:

1. Возможно, вы можете воссоздать пробел, поместив div под текстовой областью и удалив пробел из текстовой области (пространство вокруг текста)

2. Просто добавьте дескриптор перетаскивания…. то, что вы хотите сделать, не удастся во многих крайних случаях.

3. @epascarello вы имеете в виду дескриптор изменения размера? Это было бы не то, что мне нужно

Ответ №1:

Не совсем уверен, о чем вы спрашиваете, но вот моя попытка перевести безумие в рабочий код:

 let doc, htm, bod, I; // for use on other loads
addEventListener('load', ()=>{
doc = document; htm = doc.documentElement; bod = doc.body; I = id=>doc.getElementById(id);
// magic under here
const test = I('test');
function whiteStart(string){
  if(string.match(/^s /)){
    return true;
  }
  return false;
}
test.oncopy = test.ondragstart = function(){
  let s = getSelection().toString();
  if(whiteStart(s)){
    console.log('"' s '" starts with one or more white spaces');
  }
  else{
    console.log('"' s '" starts without a white space');
  }
}
}); // end load  
 <div id='test'>Iamp;apos;m just going to put some text in here so we can run a very basic test. I hope this helps!</div>  

Комментарии:

1. под «пробелом» (не «пробелом») я подразумевал пустое пространство, часть текста, в которой нет символов (например, справа от строки, которая не доходит до самого конца).

2. /^s / это регулярное выражение для начала с одного или нескольких пробелов. Чего вы на самом деле пытаетесь достичь?