Я мало что могу вспомнить, когда мои мысли путаются, так что просто записывайте все, что я помню. . . .
Используйте css для достижения эффекта непрерывной анимации
animation:mymove 5s infinite;
@keyframes mymove {
from {top:0px;}
to {top:200px;}
}
Основной тест:animation
использование
ценность | описывать |
---|---|
animation-name |
Задает имя ключевого кадра, которое необходимо привязать к селектору. |
animation-duration |
Задает время в секундах или миллисекундах для завершения анимации. |
animation-timing-function |
Определяет кривую скорости для анимации. |
animation-delay |
Определяет задержку перед запуском анимации. |
animation-iteration-count |
Указывает, сколько раз должна воспроизводиться анимация. |
animation-direction |
Указывает, должна ли анимация по очереди воспроизводиться в обратном порядке. |
Используйте js для достижения эффекта непрерывной анимации
Первоначальная идея состояла в том, чтобы использовать таймер, но, в конце концов, я не подумал, что это слишком полно Ответ интервьюера состоял в том, чтобы использоватьrequestAnimationFrame
.
- Идеи таймера
var e = document.getElementById('e')
var falg = true;
var left = 0;
setInterval(() => {
left == 0 ? falg = true : left == 100 ? falg = false : ''
falg ? e.style.left = ` ${left++}px` : e.style.left = ` ${left--}px`
}, 1000 / 60)
-
requestAnimationFrame
Так как я не использовал это раньшеAPI
Так что сейчас учится.
//兼容性处理
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
function(callback){
window.setTimeout(callback, 1000 / 60);
};
})();
var e = document.getElementById("e");
var flag = true;
var left = 0;
function render() {
left == 0 ? flag = true : left == 100 ? flag = false : '';
flag ? e.style.left = ` ${left++}px` :
e.style.left = ` ${left--}px`;
}
(function animloop() {
render();
requestAnimFrame(animloop);
})();
Пожалуйста, исправьте недостатки (в конце концов, это текущее исследование) и проверьте преимущества между прочим:
- Браузеры могут оптимизировать параллельные действия анимации, более рационально перестраивать последовательности действий и выполнять действия, которые можно комбинировать в одном цикле рендеринга, что приводит к более плавным эффектам анимации.
- Устранение погрешности в миллисекундах
- Избегайте чрезмерного рендеринга (слишком частого рендеринга,
tab
Невидимая пауза и т.д.)
Примечание:requestAnimFrame
Как и таймер, он также имеет аналогичный метод очисткиcancelAnimationFrame
.
Фиксированная ширина справа, адаптивная слева
Первое:
<style>
body{
display: flex;
}
.left{
background-color: rebeccapurple;
height: 200px;
flex: 1;
}
.right{
background-color: red;
height: 200px;
width: 100px;
}
</style>
<body>
<div class="left"></div>
<div class="right"></div>
</body>
секунда
<style>
div {
height: 200px;
}
.left {
float: right;
width: 200px;
background-color: rebeccapurple;
}
.right {
margin-right: 200px;
background-color: red;
}
</style>
<body>
<div class="left"></div>
<div class="right"></div>
</body>
Сейчас на ум приходят два.
Центрируется по горизонтали и вертикали
Первое
#container{
position:relative;
}
#center{
width:100px;
height:100px;
position:absolute;
top:50%;
left:50%;
transform: translate(-50%,-50%);
}
секунда
#container{
position:relative;
}
#center{
width:100px;
height:100px;
position:absolute;
top:50%;
left:50%;
margin:-50px 0 0 -50px;
}
третий
#container{
position:relative;
}
#center{
position:absolute;
margin:auto;
top:0;
bottom:0;
left:0;
right:0;
}
четвертыйflex
#container{
display:flex;
justify-content:center;
align-items: center;
}
Разница между четырьмя позициями
-
static
значение по умолчанию -
relative
Относительное позиционирование Смещение относительно исходного положения, все еще в стандартном потоке документов -
absolute
Абсолютное позиционирование Относительно ближайшего позиционированного элемента-предка существует позиционированное (см.position
нетstatic
element) элемент-предок с ближайшим элементом-предком в качестве эталона. Если нет позиционированного элемента-предка, тоbody
Элементы представляют собой смещенные базы, полностью выходящие за рамки стандартного документооборота. -
fixed
Элемент с фиксированным положением позиционируется относительно области просмотра, что означает, что он остается в той же позиции даже при прокрутке страницы. Элемент с фиксированным положением не сохраняет пространство, которое в противном случае было бы на странице.
Часто ли используется макет Flex?
Поскольку проект учитывает совместимостьIE9
Так что толку мало
Как проходит мобильная адаптация?
Адаптивные макеты, созданные с помощью медиазапросов, которые загружаются по-разному в зависимости от ширины экрана.css
.
В чем разница между letи var?
let
заES6
Добавлена новая команда объявления переменных, похожая наvar
, но со следующими отличиями:
-
var
Область объявленной переменной находится внутри функции, в которой находится оператор, и существует явление подъема переменной. -
let
Область объявленной переменной находится в пределах блока кода, в котором находится оператор, и продвижение переменной отсутствует. -
let
Дублирование деклараций не допускается.
Почему var можно объявлять повторно? (не знаю этого)
Когда мы выполняем код, мы можем просто понять, что блок памяти выделен для новой переменной с именемa
, и назначьте его как2
, но компилятор и движок будут выполнять две дополнительные операции во время выполнения: определять, объявлена ли переменная:
- Сначала компилятор анализирует и дизассемблирует код, и встречается слева направо
var a
, компилятор спросит, существует ли уже область с именемa
переменная, если она не существует, область приветствия объявляет новую переменнуюa
, если он уже существует, игнорируйтеvar
Продолжайте компилировать, затемa = 2
Компилируется в исполняемый код для использования движком. - двигатель встречает
a=2
также спросит, есть ли переменные в текущей областиa
, если он существует, то будетa
назначить как2
(поскольку на первом шаге компилятор игнорирует повторное объявлениеvar
, а область видимости уже естьa
, поэтому повторные объявления будут переопределены без ошибки). Если он не существует, он будет искать цепочку областей видимости, если переменная наконец будет найдена.a
назначить его2
, если не найдено, объявить переменную в области приветствияa
и назначить как2
.
Ссылка на ссылку
Инкапсулируйте функцию, параметром является время таймера, а затем выполняет функцию обратного вызова.
function sleep (time) {
return new Promise((resolve) => setTimeout(resolve, time));
}
Вопрос о том, на что это указывает
Так и должно быть, точно не помню.
obj = {
name: 'a',
getName : function () {
console.log(this.name);
}
}
var fn = obj.getName
obj.getName()
var fn2 = obj.getName()
fn()
fn2()
В чем разница между запросом/экспортом в CommonJS и импортом/экспортом в ES6?
-
CommonJS
Важной особенностью модуля является то, что он выполняется при загрузке, то есть код скрипта выполняется вrequire
, все будет выполнено. Как только модуль "циклически загружается", будет выводиться только исполняемая часть, а неисполненная часть не будет выводиться. -
ES6
Модули динамически ссылаются, если вы используетеimport
При загрузке переменных из модуля эти переменные не будут кэшироваться, а станут ссылкой на загруженный модуль, что требует от разработчика гарантии того, что значение может быть получено, когда значение действительно получено. -
import/export
в конечном итоге компилируется вrequire/exports
выполнить. -
CommonJS
В спецификации указано, что в каждом модулеmodule
Переменная представляет текущий модуль. Эта переменная является объектом,exports
свойства (т.е.module.exports
) — внешний интерфейс. Загрузка модуля фактически загружает модульmodule.exports
Атрибуты. -
export
Команда указывает внешний интерфейс и должна установить однозначное соответствие с переменными внутри модуля.
Одна строка кода для дедупликации массива?
[...new Set([1,2,3,1,'a',1,'a'])]
Используйте addEventListener, чтобы щелкнуть li, чтобы открыть содержимое, и это эффективно после динамического добавления li.
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
На этот вопрос нет ответа 😨😨
var ulNode = document.getElementById("ul");
ulNode.addEventListener('click', function (e) {
if (e.target && e.target.nodeName.toUpperCase() == "LI") {
alert(e.target.innerHTML);
}
}, false);
Как судить о том, что два объекта равны?
obj={
a:1,
b:2
}
obj2={
a:1,
b:2
}
obj3={
a:1,
b:2
}
Первоначальная идея состояла в том, чтобы пройти, чтобы судить, но в итоге это не показалось ясным.Посмотрев это, кажется, что его можно преобразовать в строку, чтобы судить.
JSON.stringify(obj)==JSON.stringify(obj2);//true
JSON.stringify(obj)==JSON.stringify(obj3);//false
Какую оптимизацию производительности сделал проект?
- уменьшать
HTTP
количество запросов - уменьшать
DNS
Запрос - использовать
CDN
- Избегайте перенаправлений
- Ленивая загрузка изображения
- уменьшать
DOM
количество элементов - уменьшать
DOM
действовать - использовать внешний
JavaScript
иCSS
- компрессия
JavaScript
,CSS
, шрифты, картинки и т.д. - оптимизация
CSS Sprite
- использовать
iconfont
- обрезка шрифта
- Распределение по нескольким доменам делит контент на разные домены
- попытаться вычесть
iframe
использовать - избегайте картинок
src
Пусто - поместите таблицу стилей в
- Поместите скрипт внизу страницы
Дополнения приветствуются. . .
Как осуществляется модульная разработка?
Используйте пространства имен.
Вы когда-нибудь использовали веб-пакет?
Я сказал, что это использовалось в проекте Vue, а потом не спрашивал.
Gulp сам пишет задачи? Или используются все модули?
Не знаю как ответить.Неужели все написано с использованием модулей, а потом говорится, что используются модули.
Как Vue router реализует переходы в дополнение к router-link?
router.go(1)
router.push('/')
В чем разница между Vue router jump и location.href?
router
даhash
Изменятьlocation.href
это переход на страницу, обновите страницу
Как работает двусторонняя привязка Vue?
пройти черезObject.defineProperty
осуществленный
Можете ли вы реализовать двустороннюю привязку? 😰😰
<body>
<div id="app">
<input type="text" id="txt">
<p id="show-txt"></p>
</div>
<script>
var obj = {}
Object.defineProperty(obj, 'txt', {
get: function () {
return obj
},
set: function (newValue) {
document.getElementById('txt').value = newValue
document.getElementById('show-txt').innerHTML = newValue
}
})
document.addEventListener('keyup', function (e) {
obj.txt = e.target.value
})
</script>
</body>
В чем разница между React и Vue?
Установить и сопоставить структуры данных (😨😨)
-
ES6
Предоставляет новые структуры данныхSet
Он похож на массив, но все значения членов уникальны и нет повторяющихся значений. -
ES6
при условииMap
структура данных. Он подобен объекту и также представляет собой набор пар ключ-значение, но область действия «ключей» не ограничивается строками, и в качестве ключей могут использоваться различные типы значений (включая объекты). Это,Object
Структура обеспечивает соответствие "строка-значение",Map
Структура обеспечивает соответствие «значение-значение», которое является более полным.Hash
Структурная реализация.
Разница между WeakMap и Map?
-
WeakMap
структура иMap
Структура в основном похожа, единственное отличие состоит в том, что она принимает только объекты в качестве ключей (null
За исключением), другие типы значений не принимаются в качестве имен ключей, а объект, на который указывает имя ключа, не включается в механизм сборки мусора. -
WeakMap
Самым большим преимуществом является то, что можно избежать утечек памяти. толькоWeakMap
в видеkey
Ссылочный объект будет собран сборщиком мусора. -
WeakMap
есть иMap
сродниset(key, value)
,get(key)、has(key)
,delete(key)
иclear()
метод без каких-либо свойств и методов, связанных с итерацией.
Перекомпоновать и перекрасить
- Некоторые деревья рендеринга (или все дерево рендеринга) требуют повторного анализа и пересчета размера узла. Это называется перестановкой. Учтите, что будет как минимум одна перестановка — макет страницы инициализации.
- Некоторое содержимое на экране необходимо обновить из-за изменений в геометрии узла или из-за изменений в стиле, таких как изменение цвета фона элемента. Такие обновления называются перерисовками.
Что вызовет перекомпоновку и перерисовку?
- добавить, удалить, обновить
DOM
узел - пройти через
display: none
скрыть одинDOM
Узел — запускает перекомпоновку и перерисовку - пройти через
visibility: hidden
скрыть одинDOM
Узел — запускает только перерисовку, потому что геометрия не меняется. - переместить или передать на страницу
DOM
Узел добавления анимации - Добавьте таблицу стилей и настройте свойства стиля
- Действия пользователя, такие как изменение размера окна, изменение размера шрифта или прокрутка.
кеш браузера
Кэш браузера делится на сильный кеш и кеш согласования. Когда клиент запрашивает ресурс, процесс получения кэша выглядит следующим образом:
- Сначала на основе некоторых из этого ресурса
http header
Определяем попадает ли он в сильный кеш, при попадании ресурсы кеша берутся напрямую из локального, и запрос на сервер не отправляется; - Когда сильный кеш пропускает попадание, клиент отправляет запрос на сервер, а сервер передает еще один запрос.
request header
Убедитесь, что этот ресурс попадает в кэш согласования, который называетсяhttp
Повторная проверка, при попадании сервер вернет запрос, но не вернет ресурс, а скажет клиенту получить его прямо из кеша, а клиент получит ресурс из кеша после получения возврата; - Что общего у сильного кеша и кеша согласования, так это то, что при попадании в кеш сервер не вернет ресурс;
- Разница в том, что сильное кэширование не отправляет запросы на сервер, а согласованное кэширование делает это.
- Когда согласованный кеш также дает сбой, сервер отправляет ресурс обратно клиенту.
- когда
ctrl+f5
Когда веб-страница принудительно обновляется, она загружается непосредственно с сервера, минуя сильный кеш и кеш согласования; - когда
f5
При обновлении веб-страницы сильный кеш пропускается, но проверяется согласованный кеш;
Сильный кеш
- Истекает (это поле
http1.0
спецификация времени, значение является абсолютным временемGMT
Строка времени в формате, представляющем время истечения срока действия кэшированного ресурса) - Cache-Control:max-age (это поле
http1.1
спецификация, сильные кеши используют преимущества ихmax-age
значение для определения максимального времени жизни кэшированного ресурса, его значение в секундах)
Согласовать кеш
- Last-Modified (значение — время последнего обновления ресурса, возвращаемое с ответом сервера)
- If-Modified-Since (определение того, был ли ресурс изменен во время двух запросов, путем сравнения двух раз, если нет, попадание в кеш согласования)
- ETag (представляет собой уникальный идентификатор содержимого ресурса, возвращаемый с ответом сервера)
- If-None-Match (Сервер определяет, был ли изменен ресурс между двумя запросами, сравнивая If-None-Match в заголовке запроса с ETag текущего ресурса, чтобы определить, был ли ресурс изменен между двумя запросами. .Если модификации нет, она попадет в кеш согласования)