javascript — Выполнение JS внутри div с display:none
Вопрос задан
Изменён 5 месяцев назад
Просмотрен 63 раза
Не смог найти информацию, но хочется освежить в памяти следующий момент.
Имеем какую-то HTML структуру. JS в виде интеграции с внешним сервисом.
<html> ... <div> <script src="..."></script> </div> ... </html>
Верно ли утверждение, что браузер по мере загрузки DOM будет выполнять все встречаемые элементы <scrip></script>? Если да — тогда в чем отличие display:none
от visible:hide
?
Основная суть вопроса: как отложить загрузку <script>
до выполнения условия (например наличие класса в body /или/ проверка значения в
)?
document. addEventListener('DOMContentLoaded')
и $(document).ready()
не в счет. Так как логика завязана на внешний скрипт
- javascript
- html
- jquery
Верно ли утверждение, что браузер по мере загрузки DOM будет выполнять все встречаемые элементы ?
Не проверял, но предположу, что да, верно. Впрочем, вы можете проверить это сами. Я свое предположение обосновываю следующей частью ответа.
Если да — тогда в чем отличие display:none от visible:hide
display:none
убирает элемент из базового потока. При этом в DOM-дереве элемент все равно остается. visibility: hidden
в прямом смысле делает элемент невидимым. Сравните:
Ничего не трогал:
display: none
visibility: hidden
Основная суть вопроса: как отложить загрузку до выполнения условия (например наличие класса в body /или/ проверка значения в localStorage)?
Обычно, конечно, так не делается в современном фронтенде. Подобные вещи — асинхронная загрузка скрипта on-demand — выполняются на уровне бандлера: code-splitting, tree-shaking и т.п. вещи.
Если же вы твердо уверены, что вам нужно именно то, что вы написали, то смотрите в сторону динамического добавления элемента script
на страницу. Раньше иногда действительно именно так и делали. Встраивали в рантайме элемент script
с каким-то содержимым на страницу, и только после этого сам скрипт начинал исполняться.
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
Система отображения iTwin.
js — iTwin.jsОбучение > отображение
Редактировать эту страницу
Система отображения iTwin.js отвечает за создание и визуализацию графики, позволяющей визуализировать содержимое iTwin. Это содержимое может включать iModels, модели реальности, данные датчиков IoT, изображения карты и другие источники данных. Приложения также могут предоставлять свою собственную графику через Decorators и TiledGraphicsProvider.
Система отображения разделена на две подсистемы:
- Средство рендеринга тайлов на основе WebGL, работающее во внешнем интерфейсе и отвечающее за отображение содержимого окон просмотра; и
- Генератор листов с собственным кодом, работающий на серверной части и отвечающий за создание листов в формате iMdl из содержимого iModel.
Уровень кэширования может быть введен между интерфейсной и серверной подсистемами для предоставления ранее сгенерированных тайлов; или серверная часть может поддерживать свой собственный внутренний кеш.
Эта документация касается в первую очередь интерфейсной части системы отображения; документация для внутреннего генератора плиток ограничена обзором формата плитки iModel.
Особенности
- Мозаичная визуализация
- Освещение, материалы и окружающая среда
- Вырезка и разрезание графики
- 2D чертежи и листы
- Гипермоделирование
- Пограничный дисплей
- Внешний вид важнее
- Эффекты частиц
- Экранные эффекты
- Классификация и маскировка
- Тематическая визуализация
- Анимация временной шкалы
- Элементная графика
- Многовыборочное сглаживание
- Сетчатый дисплей
Конфигурация
Обязанности визуализатора разделены между двумя объектами:
- TileAdmin координирует запросы на плитки и управляет их временем жизни, чтобы ограничить потребление памяти. Доступ к нему можно получить через IModelApp. tileAdmin и настроить при запуске через IModelAppOptions.tileAdmin.
- RenderSystem связывается с графическим оборудованием через WebGL для выделения ресурсов, таких как RenderGraphics и RenderTextures, и для отображения содержимого окон просмотра на экране. Доступ к нему можно получить через IModelApp.renderSystem и настроить при запуске через IModelAppOptions.renderSys.
WebGL
Поскольку модуль визуализации работает в среде браузера, он использует WebGL для взаимодействия с графическим оборудованием. Однако контекст WebGL не доступен для использования приложениями. Вместо этого такие абстракции, как GraphicBuilder и RenderSystem, предоставляют API более высокого уровня для косвенной работы с ресурсами WebGL.
Средство визуализации поддерживает произвольное количество окон просмотра, все из которых используют один контекст WebGL, чтобы уменьшить дублирование ресурсов, таких как шейдеры, текстуры и плитки. Окна просмотра могут свободно располагаться относительно друг друга, с перекрытием или без него.
Средство визуализации попытается использовать WebGL 2, который предоставляет больше возможностей и более высокую производительность, чем WebGL 1; но вернется к WebGL 1 на устройствах, не поддерживающих WebGL 2. На момент написания браузер Safari наконец-то получил официальную поддержку WebGL 2 (в macOS Monterey и iOS 15), что сделало поддержку WebGL 2 почти универсальной. Тем не менее, некоторые расширенные функции средства визуализации могут не поддерживаться на некоторых устройствах; обратитесь к средству проверки совместимости, чтобы определить, какие функции могут быть недоступны на вашем устройстве.
Поддерживаются основные современные браузеры, включая Firefox, Safari и браузеры на основе хрома (Chrome, Electron, Brave, «новый» Edge и т. д.). Оптимальная графическая производительность наблюдается в браузерах на основе хрома. Internet Explorer и «старый» Edge не поддерживаются.
Альтернативы
WebGL предоставляет лишь часть возможностей современного графического оборудования. Более фотореалистичные визуализации iModels можно получить, используя iTwin для Unreal от Bentley Systems или образец экспортера Unity для экспорта сеток для использования Unreal Engine и Unity соответственно. Или вы можете написать экспортер в формат по вашему выбору, используя IModelDb.exportGraphics.
Последнее обновление: 30 декабря 2021 г.
Извлечение и отображение данных из API в React js
При разработке приложения вам часто потребуется извлекать данные из серверной части или стороннего API. В этой статье мы изучим различные способы получения и отображения данных из API в React.
Извлечение данных с использованием встроенного API
fetch
. Все современные браузеры поставляются со встроенным веб-API для выборки, который можно использовать для получения данных из API.
В этом руководстве мы будем получать данные из API-интерфейсов сервера JSON.
импортировать React, {useEffect, useState} из "реагировать" const UsingFetch = () => { const [пользователи, setUsers] = useState([]) const fetchData = () => { выборка("https://jsonplaceholder.typicode.com/users") .тогда (ответ => { вернуть ответ.json() }) .тогда (данные => { setUsers(данные) }) } использоватьЭффект(() => { выборка данных() }, []) возвращаться ( <дел> {users.length > 0 && ( <ул> {users.map(пользователь => (
В приведенном выше коде
- У нас есть хук
useEffect
, который будет выполняться после монтирования компонента (альтернатива componentDidMount в компонентах на основе классов). Внутри хукаuseEffect
мы вызываем функциюfetchData
. - В функции
fetchData
мы делаем вызов API для выборки пользователей и установки для них локального состояния. - Если пользователи существуют, мы просматриваем их и отображаем их имена в виде списка.
Подробнее о том, как работает useEffect
и как перебирать массив в React, вы можете узнать из моих предыдущих статей.
Поскольку вызовы API асинхронны, fetch
API возвращает обещание. Следовательно, мы связываем метод , затем
с обратным вызовом, который будет вызываться, когда мы получим ответ от сервера/бэкенда.
Поскольку нам нужно, чтобы ответ был преобразован в JSON, мы вызываем метод .json()
с возвращенным ответом. Опять .json()
возвращает обещание, поэтому нам нужно связать еще один метод , а затем
, чтобы выполнить второе обещание.
Поскольку обратные вызовы , а затем
имеют только одну строку, мы можем использовать неявные возвраты, чтобы сократить метод fetchData
следующим образом:
const fetchData = () => выборка("https://jsonplaceholder. typicode.com/users") .тогда(ответ => ответ.json()) .затем (данные => setUsers (данные))Войти в полноэкранный режимВыйти из полноэкранного режима
Получение данных в React с использованием async-await
Если вы хотите использовать синтаксис async-await вместо обратных вызовов , а затем
, вы можете написать тот же пример следующим образом:
import React, { useEffect, useState } from "react" константа AsyncAwait = () => { const [пользователи, setUsers] = useState([]) const fetchData = асинхронный () => { константный ответ = ожидание выборки ("https://jsonplaceholder.typicode.com/users") константные данные = ожидание ответа.json() setUsers(данные) } использоватьЭффект(() => { выборка данных() }, []) возвращаться ( <дел> {users.length > 0 && ( <ул> {users.map(пользователь => (