Как предотвратить запуск HTML-кода?

Я стараюсь встроить несколько фреймов на одну страницу, не замедляя ее. Когда я встроил единственный iframe, он работал без сбоев; добавили второй и третий, и все они были медленнее, несмотря на то, что одновременно отображался только один (с использованием JScript). Я предполагаю, что это связано с тем, что код iframe все еще выполняется.

Как я могу выполнить код условно? В моем случае всякий раз, когда нажимается кнопка.

Помощь приветствуется.


Fiddle for the exact code I use, with actual content replaced by IDs and iframes by p's: http://jsfiddle.net/aof89Ljt/55/

HTML для окон iframe:

<p id = "ifr1">
  ifr1
</p>
<p id = "ifr2" style = "display:none;">
  ifr2
</p>
<p id = "ifr3" style = "display:none;">
  ifr3
</p>

Обновлено: Новая ссылка JFiddle с включенным JScript. Описание конечной цели: я нажимаю кнопку, которая отображает другой встроенный график Desmos, затем другой график, затем первый график - в цикле, по одному (см. Код). Демонстрационный gif: https://puu.sh/Bjpil/da9a038e11.gif

ОБНОВЛЕНИЕ 2: Решение найдено; полный код: https://jsfiddle.net/32uxrhmw/49/

ОБНОВЛЕНИЕ 3: Значительно оптимизированный код: https://jsfiddle.net/32uxrhmw/92/

Итак, вы имеете в виду, что вы показываете только первый iframe, и одно нажатие кнопки или какое-то событие вы скрываете первый iframe и показываете второй, и так далее?

Deepak Sharma 24.08.2018 04:28

Лучше поместить свои фреймы в атрибут данных элемента, и когда вы нажимаете кнопку, вы получаете его из атрибута данных и устанавливаете его как innerHTML элемента.

Muhammad 24.08.2018 04:49

Правильный @DeepakSharma

OverLordGoldDragon 24.08.2018 05:26

Не уверен, как это сработает @Muhammad

OverLordGoldDragon 24.08.2018 05:26

Мой обновленный ответ не должен замедлять время начальной загрузки, потому что значение URL-адреса добавляется только в источник onclick. Может потребоваться настройка, чтобы включить цикл, но это другой вопрос.

TBB 24.08.2018 05:36

@OverLordGoldDragon - Я думаю, что вы здесь новичок, так что просто чтобы вы знали, как правило, считается плохим тоном продолжать расширять сферу вашего запроса. Люди тратят время, чтобы ответить вам, а затем вы меняете игровое поле. В будущем вам следует попытаться разбить свои проблемы на отдельные проблемы и публиковать их отдельно - например, 1) проблема начальной загрузки страницы с iFrames, 2) ваш эффект «зацикливания» и т. д. Что касается эффекта зацикливания, как вы это делаете - загрузка гифку как в вашем примере? Если это так, вы, вероятно, просто захотите загрузить изображение в том же формате, который я предложил для окон iframe.

TBB 24.08.2018 05:57

Ваши ответы также должны быть отдельными ответами с кодом здесь, на сайте, а не обновлениями вопроса, которые представляют собой просто сторонние ссылки.

BSMP 09.09.2018 20:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
7
398
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно добавить триггер события onclick = "<your function>" к элементам, которые вы хотите «сделать».

Простой пример:

<button onclick = "swap()">Button</button>

<iframe style = "display: none;" data-url = "https://www.example.com" id = "iframe">
  <p>Your browser does not support iframes.</p>
</iframe>
  
<script>
function swap() {
e = document.getElementById('iframe'); // get iframe
url = e.dataset.url; // get desired url attribute stored in data-url
e.setAttribute("src", url); // add the iframe src with desire url
e.removeAttribute("style"); // remove styling that hid it otherwise
}
</script>

ОБНОВЛЕНО, чтобы лучше подходить к вопросу.

ОБНОВЛЕНО снова, чтобы включить хорошее предложение @Joe Fitzsimmons по обработке источников iframe (в его ответе).

ЗАКЛЮЧИТЕЛЬНОЕ ДОБАВЛЕНИЕ ПОСМОТРЕТЬ КОД:

Глядя на ваш последний код, кажется, что вы хотите сделать следующее:

  1. загрузить страницу с одним iframe;

  2. затем измените iframe, отображаемый при нажатии кнопки.

Если это то, что вы хотите, вы можете использовать этот гораздо более простой код:

(Примечание: я использовал ваш образец кода в качестве основы, но не вставлял никаких URL-адресов src - ваш может быть частным, но даже если не все они показали одинаковый результат, это может сбить с толку других читателей)

<style> 
.tdropbtn {
  background-color: white;
  font-size: 16px;
  border: none;
  cursor: pointer;
  color: #0066CC;
}
</style>

<center>
<iframe id = "frame" src = "https://url1" width = "500px" height = "400px" frameborder=0></iframe>
</center>


<div style = "display:inline;">
  <center>
    <button onclick = "swap()" class = "tdropbtn">[+]</button>
  </center>
</div>

<script>
var counter     = 1;
var firstFrame  = "https://url1";
var secondFrame = "https://url2";
var thirdFrame  = "https://url3";
var e           = document.getElementById("frame");

function swap() {
if (counter == 0){
    e.src = firstFrame;
    counter++;
}
else if (counter == 1){
    e.src = secondFrame;
    counter++;
}
else if (counter == 2){
    e.src = thirdFrame;
    counter = 0;
}
}
</script>

Notepad ++ не распознает URL-адрес данных как допустимый атрибут HTML, и iframe больше не отображается. Кроме того, какой смысл устанавливать URL-адрес в функции, если он, кажется, установлен в iframe?

OverLordGoldDragon 24.08.2018 05:34

@OverLordGoldDragon - это обычный шаблон атрибута, который будет работать в браузерах. См .: developer.mozilla.org/en-US/docs/Learn/HTML/Howto/…

TBB 24.08.2018 05:37

@OverLordGoldDragon - при запуске кода открывается iframe. Он изначально скрыт, поэтому вы не получите уродливый пустой квадрат. Он не установлен в атрибуте src iframe, потому что это приведет к его загрузке при загрузке страницы - это то, что вы хотели, - то есть не замедление начальной загрузки страницы, а загрузка только при нажатии кнопки.

TBB 24.08.2018 05:40

@OverLordGoldDragon - Почти. data-url - это место для хранения значения URL. Так что поместите URL-адрес там, где у вас есть #, а не в функции. Если у вас был URL-адрес в функции, замените его на «src» (с кавычками) - у меня это сработало.

TBB 24.08.2018 06:14

@OverLordGoldDragon - Кроме того, в качестве отступления вам, вероятно, следует избегать использования элемента <center> - хотя он все еще поддерживается браузерами, это устаревший элемент (см. developer.mozilla.org/en-US/docs/Web/HTML/Element/center). Вместо этого просто стилизуйте элементы напрямую, используя элементы оболочки, только если это необходимо.

TBB 24.08.2018 06:24

Я заставил это работать - спасибо за ваш ответ. Кроме того, я использовал removeAttribute ("src") "для неотображаемых окон iframe. Полный код: jsfiddle.net/32uxrhmw/49

OverLordGoldDragon 24.08.2018 07:42

Превосходное упрощение кода - применено: jsfiddle.net/32uxrhmw/92 В качестве побочного вопроса, как мне центрировать iframe без <center>? text-align и margin auto, похоже, ничего не делают.

OverLordGoldDragon 24.08.2018 15:34

@OverLordGoldDragon - в зависимости от вашей цели, либо стилизуйте его напрямую, либо оберните его в <div> и добавьте к нему стили. По сути, в наши дни лучше всего хранить html и стили отдельно. Для центрирования я бы, вероятно, добавил класс в оболочку div со свойством margin: 0 auto;.

TBB 25.08.2018 07:05

Одна из идей - загрузить / удалить источник iframe onClick.

Это примерное представление о том, что вы могли бы сделать:

function Swap(id, url) {
 document.getElementById(id).src = url;
}

Вам также придется показывать и скрывать iFrames. Надеюсь, это поможет вам встать на путь. Я не совсем уверен, какова ваша конечная цель.

Другие вопросы по теме