задний план
В последнее время на странице больших данных, отображаемой компанией на большом экране в выставочном зале, появилось беспорядочное отображение различных компонентов, таких как текст, диаграммы и таблицы.
Цель
Решите проблему путаницы страниц и осуществите адаптацию к большому экрану с различными разрешениями.
Анализ карьера
Как говорится, большинство пройденных дорог — это рутина пользователей сети.
1. Комбинация vh, vw и rem
body,html {
font-size:1vw
}
описывать:Определите родительский размер, а затем используйте rem в качестве единицы для различных свойств CSS, таких как высота, поля и отступы компонента, и наследуйте родительские настройки и другие единицы (1vw) для достижения адаптации.
Яма:Это может соответствовать только некоторым конкретным небольшим сценариям, а реализация на большом экране очень недружелюбна, например, мы покрываем таблицу элементов до размера шрифта: 0,5rem. В это время при размещении на большом экране шрифт адаптивный, но атрибуты его компонентов по умолчанию указаны в px. Например, если для высоты строки установлено значение 22 пикселя, шрифт после перезаписи стиля будет слишком большим и не сможет адаптироваться к высоте строки, что приведет к возникновению проблем с путаницей, таких как наложение текста.
2. Используйте комбинацию font.js+rem
(function(doc, win) {
var docEl = doc.documentElement
var resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize'
var recalc = function() {
var clientWidth = docEl.clientWidth
if (!clientWidth) return
docEl.style.fontSize = 100 * (clientWidth / 1920) + 'px'
}
if (!doc.addEventListener) return
win.addEventListener(resizeEvt, recalc, false)
doc.addEventListener('DOMContentLoaded', recalc, false)
})(document, window)
описывать:Обратитесь к сторонним скриптам, напишите код в main.js для расчета и используйте rem для наследования для достижения адаптации.
Яма:Принцип тот же, что и в вышеописанном способе 1, также невозможно добиться адаптации на большой экран, и пит-пойнты не будут повторяться.
Решения
Гора темная, перспектива
Когда у нас нет хорошего пути, мы могли бы также использовать силу «плеч гигантов». Я нашел решение для адаптации больших данных, такое как Baidu и Netease. Через онлайн-кейсы мы обнаружили следующие правила (ниже я извлекУ NetEase есть номерснимок экрана):
логический анализ:
В приведенном выше примере используется свойство zoom transform: scale(X) css3 Сравнивая две картинки, нетрудно обнаружить, что при изменении разрешения значение масштаба меняется. Ребята из фронтенда видели это и, должно быть, поняли.
Нам нужно только следить за размером окна браузера и контролировать пропорцию изменения.
1. Инкапсулируйте глобальный компонент
На основе vue вставьте код, написанный мной, следующим образом:Этот общедоступный компонент назван ScreenAdapter для удобства описания ниже.
<template>
<div
class="ScreenAdapter"
:style="style"
>
<slot />
</div>
</template>
<script>
export default {
name: '',
//参数注入
props: {
width: {
type: String,
default: '1920'
},
height: {
type: String,
default: '1080'
}
},
data() {
return {
style: {
width: this.width + 'px',
height: this.height + 'px',
transform: 'scale(1) translate(-50%, -50%)'
}
}
},
mounted() {
this.setScale()
window.onresize = this.Debounce(this.setScale, 1000)
},
methods: {
Debounce: (fn, t) => {
const delay = t || 500
let timer
return function() {
const args = arguments
if (timer) {
clearTimeout(timer)
}
const context = this
timer = setTimeout(() => {
timer = null
fn.apply(context, args)
}, delay)
}
},
// 获取放大缩小比例
getScale() {
const w = window.innerWidth / this.width
const h = window.innerHeight / this.height
return w < h ? w : h
},
// 设置比例
setScale() {
this.style.transform = 'scale(' + this.getScale() + ') translate(-50%, -50%)'
console.log('任你千变万化,我都不会影响性能')
}
}
}
</script>
<style lang="scss" scoped>
.ScreenAdapter {
transform-origin: 0 0;
position: absolute;
left: 50%;
top: 50%;
transition: 0.3s;
background: red;
}
</style>
2. Используйте этот компонент как оболочку и оберните им страницу, которую мы создаем.
<ScreenAdapter> <div>大家好,我是大屏展示页面</div> </ScreenAdapter>
3. Определите веб-спецификации
- В соответствии с дизайном, предоставленным художником (главным образом получить разрешение, данное художником, например, 1920 * 1080).
- Макет Div в основном использует макет flex+percentage (конечно, он также может быть написан в пикселях по умолчанию в соответствии с дизайном, заданным художником).
- Все виды космического дизайна могут быть определены в соответствии с пикселями, заданными художником.
единый ответ на вопросы
Вопрос: Многие знакомые говорят, что после присоединения будут пробелы, которые нужно отлаживать.
Решение: это связано с тем, что вводимые ширина и высота не соответствуют фактическому разрешению компьютера.
Вопрос: введенная ширина и высота такие же, как ширина и высота разрешения.Почему есть пробел?
решать:
- Если это соответствует, вам нужно только развернуть браузер на весь экран, чтобы увидеть правильный эффект.
- Замените введенные ширину и высоту на document.documentElement.clientWidth и document.documentElement.clientHeight. Получение правильных результатов, даже если не полноэкранный режим
Теперь все должны это понять😊, основа очень важна, ха-ха~~~
Заключительные замечания
Следуя приведенным выше шагам, вы можете выполнить пропорциональное увеличение вывода на большом экране в соответствии с замыслом художника, что, как правило, идеально решает проблему адаптации к большому экрану.
Дух Интернета - делиться, я надеюсь, что эта статья поможет некоторым друзьям, у которых такая же проблема, как у меня.
Поделитесь технологиями и запишите лучшую жизнь.