Есть ли способ открыть весь текст «наведения» на веб-странице сразу? [Дубликат]

Недавняя статья по этому вопросу Криса Рита в Кодирование без комментариев .

Примечание. Кодирование без комментариев больше недействительно. Тем не менее, связанная с этим статья была клонирована другим пользователем.

http://geekswithblogs.net/AngelEyes/archive/2013/09/08/singleton-i-love-you- но-Youre приносящие меня вниз-ре-uploaded.aspx

0
задан Mr Lister 28 February 2016 в 19:29
поделиться

2 ответа

Обновленный ответ

Подсказка кода приводит к появлению индикаторов типа ответа рядом с каждым пунктом ответа, когда вы наводите курсор на любой из этих ответов. Это следует из следующих шагов:

  • Извлеките все пункты ответа, используя document.querySelectorAll("[titles]").
  • Для каждого абзаца ответа создайте соответствующий индикатор типа ответа div. Этот div начнет скрываться и будет располагаться с помощью position: absolute, но это абсолютное положение будет относиться к позиции соответствующего исходного абзаца ответа.
  • Настройте один обработчик для 'mouseover' событие, чтобы каждый индикатор был видимым, добавив к нему подходящий класс «показать мне».
  • Настройте другой обработчик для события 'mouseout', чтобы каждый индикатор был скрыт, удалив тот же самый «показать мне» «класс из него.

Я стараюсь не называть эти индикаторы всплывающими подсказками, как я заметил в комментариях. Обратите внимание, однако, что эти индикаторы появляются сразу же после начала наведения, но исходная подсказка по умолчанию только для этого конкретного ответа также появляется через минуту или два, дублируя некоторые данные вашего дисплея без необходимости. Вы можете отключить эту всплывающую подсказку по умолчанию, если хотите, но это потребует дополнительной работы.

Я включил z-index: -1; в стиль индикаторов из-за проблемы, которая может возникнуть в ее отсутствие. Вы показываете индикаторы, вызывая ответ. Однако, если, когда этот индикатор появляется, он покрывает ответ, где находится ваш курсор, тогда мышь технически больше не отвечает за ответ, и вы немедленно запускаете событие 'mouseout'. В качестве альтернативы, если вы случайно натолкнулись на позицию, находящуюся в пункте ответа, но немного вдали от того, где появляется индикатор, индикатор по-прежнему будет отображаться как ожидалось. Тем не менее, вам нужно только перемещать указатель мыши на несколько миллиметров мыши на индикатор, эффективно вынимая ответ, снова заставляя индикатор исчезать преждевременно. z-index: -1; предотвращает это, так как это гарантирует, что пункт ответа также «сверху». Однако одна нижняя сторона этого заключается в том, что текст индикатора может быть частично скрыт текстом ответа в зависимости от того, как вы позиционируете индикатор относительно текста ответа.

// the positioning of each indicator relative its corresponding answer text
var indicOffsetTop = 10;
var indicOffsetLeft = 5;

// retrieve all the answer paragraphs from the DOM
var answers = document.querySelectorAll("[title]");

// build but don't yet show the answer-type indicators

// loop over each answer paragraph
[].forEach.call(answers, function(answer) {
  
  // create a new div element that will contain the answer-type text
  var indic = document.createElement("div");
  
  // style this div so it stands out and also so that it starts out hidden
  indic.classList.add("answerTypeIndicator");
  
  // get the position of the original answer paragraph so that
  // the new answer-type indicator can be positioned near it
  var posn = answer.getBoundingClientRect();
  
  // slightly offset the position of the answer-type indicator relative to
  // its corresponding answer text so that both can be seen simultaneously
  indic.style.top = posn.top + indicOffsetTop + "px";
  indic.style.left = posn.left + indicOffsetLeft + "px";
  
  // take the value (i.e. the text) from the title attribute of the answer paragraph
  // and put it into the content of the answer-type indicator
  indic.innerHTML = answer.getAttribute("title");
  
  // place the new indicator into the DOM, but note that it is still hidden at this point
  document.body.appendChild(indic);
});

// put all the newly created answer-type indicator divs into a variable for later access
var indics = document.querySelectorAll(".answerTypeIndicator");

// determine what code to call when starting and stopping hovering over an answer
// do this by adding hover listeners to each "answer" paragraph
[].forEach.call(answers, function(answer) {
  answer.addEventListener("mouseover", showTitleInfo);
  answer.addEventListener("mouseout",  hideTitleInfo);
});

// do this when starting to hover over an answer
function showTitleInfo() {
  
  // loop through each answer-style indicator div
  [].forEach.call(indics, function(indic) {
    
    // make each indicator visible
    indic.classList.add("showing");
  });
}

// do this when stopping hovering over an answer
function hideTitleInfo() {
  
  // loop through each answer-style indicator div
  [].forEach.call(indics, function(indic) {
    
    // hide each indicator
    indic.classList.remove("showing");
  });
}
.answerTypeIndicator {
  position: absolute;
  font-size: 10pt;
  background-color: rgba(255, 128, 0, 0.3);
  color: rgb(200, 0, 0);
  padding: 0.2em 0.5em 0.1em;
  border: solid rgb(200, 0, 0) 1px;
  fill-opacity: 0.2;
  display: none;
  z-index: -1;
}

.showing {
  display: block;
}
<h3>Move the mouse over any answer to see all answer types.</h3>
<p>Which of these is a way to greet someone?</p>
<p title="Correct answer">Hello world</p>
<p title="Wrong answer">Goodbye world</p>
<p>What color is an apple?</p>
<p title="Correct answer">Red</p>
<p title="Wrong answer">Blue</p>

2
ответ дан Andrew Willems 18 August 2018 в 04:31
поделиться
  • 1
    Спасибо. Любая идея о том, как я могу показать все всплывающие подсказки, вместо того, чтобы возвращать массив со всем заголовком & quot; атрибуты на странице? – Caro_deb 24 February 2016 в 07:29
  • 2
    В своем вопросе вы пишете, что хотите «показать все» и «заголовки». всплывающие подсказки сразу, когда я нахожу один из div ... ». Всплывающая подсказка показывает информацию в месте расположения курсора или рядом с ним. Когда вы наводите курсор на div, вы хотите, чтобы он показывал только значение «title & quot; атрибут для этого div (например, либо «Правильный ответ» ИЛИ «Неверный ответ» из вашего примера, в зависимости от того, какой div вы наведете), либо вы хотите, чтобы он фактически отображал все «заголовок» ; значения атрибута «сразу», как ваш вопрос указывает (например, «Правильный ответ» И «Неверный ответ», независимо от того, какой div вы наводите на себя)? – Andrew Willems 24 February 2016 в 13:31
  • 3
    Когда я нависаю над любым & lt; p & gt; элементов, я хочу отображать все подсказки под их соответствующими & lt; p & gt; теги сразу. Я хочу, чтобы каждый из моих & lt; p & gt; чтобы иметь соответствующую подсказку (с соответствующим значением атрибута title). Один "заголовок" атрибут на всплывающую подсказку. – Caro_deb 24 February 2016 в 17:31
  • 4
    Я думаю, вы неправильно понимаете термин «всплывающая подсказка». Просмотрите статью wikipedia Tooltip . С помощью всплывающей подсказки информация отображается в месте расположения курсора или рядом с ним или, по крайней мере, рядом с элементом, над которым курсор нависает. То, о чем вы просите, это просто иметь заголовок & quot; значение атрибута отображается на всей странице, когда любой «ответ» абзац зависает над ... законной целью, но это не всплывающая подсказка. – Andrew Willems 24 February 2016 в 23:20

Простой способ проверить это.

HTML:

<p class="display_all_title"></p>

JS:

var all_title = "";

$("body").find('p[title]').each(function() {
    all_title += $(this).attr('title') + " ";
});
$('p.display_all_title').html(all_title);

JsFiddle: https: // jsfiddle.net/fhepoeb5/

0
ответ дан aldrien.h 18 August 2018 в 04:31
поделиться
  • 1
    Спасибо за ответ, но у меня слишком много & lt; p & gt; теги на моей странице, чтобы добавить класс к каждому из них, заняли бы много времени. Предположим, что у меня есть более 75 & lt; p & gt; теги прямо сейчас. – Caro_deb 24 February 2016 в 07:22
  • 2
    Привет @Ch Hr, если ваша проблема имеет много p-тэгов на вашей странице, вы можете изменить селектор на [title] вместо p [title]. – aldrien.h 24 February 2016 в 09:02
  • 3
    @Ch Hr, обратите внимание, что class="display_all_title" добавляется только к одному абзацу, чтобы показать результаты, а не каждому из ваших так называемых «ответов». абзацы. – Andrew Willems 24 February 2016 в 14:35
  • 4
    @ aldrien.h, ваше решение на основе jQuery работает. Тем не менее, по сути это пустая трата усилий на то, чтобы $('p.display... line внутри использовать функцию .each(..., так как это (без необходимости) обновляет p.display... каждый раз через цикл. Лучше просто переместить эту последнюю строку после функции, чтобы она обновлялась только один раз в конце. Для этого не требуется ни одной дополнительной буквы кода. – Andrew Willems 24 February 2016 в 14:40
  • 5
    Привет @AndrewWillems, да, я это знаю. Я по-прежнему смотрел его ха-ха. Просто поставьте $ ('p.display_all_title'). Html (all_title); вне цикла. Я обновлю ответ. – aldrien.h 25 February 2016 в 01:57