78 lines
4.9 KiB
HTML
78 lines
4.9 KiB
HTML
<!doctype html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="utf-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Красивое позирование на фото</title>
|
||
<script src="https://cdn.jsdelivr.net/npm/pptxgenjs@3.12.0/dist/pptxgen.bundle.js"></script>
|
||
<style>
|
||
* { margin: 0; box-sizing: border-box; }
|
||
body { font-family: -apple-system, "Segoe UI", Roboto, sans-serif; background: #14100e; color: #f7f3ee; }
|
||
.slide { display: none; min-height: 100vh; padding: 8vh 10vw; flex-direction: column; justify-content: center; }
|
||
.slide.on { display: flex; }
|
||
.slide h1 { font-size: clamp(34px, 6vw, 64px); margin-bottom: 24px; }
|
||
.slide li { font-size: clamp(18px, 2.6vw, 28px); line-height: 1.6; margin-bottom: 10px; list-style: none; padding-left: 28px; position: relative; }
|
||
.slide li::before { content: ""; position: absolute; left: 0; top: .55em; width: 12px; height: 12px; border-radius: 3px; background: #e8b04b; }
|
||
.num { position: fixed; bottom: 18px; right: 22px; color: #9a938c; font-size: 14px; }
|
||
.nav { position: fixed; bottom: 14px; left: 22px; display: flex; gap: 8px; }
|
||
.nav button { border: 1px solid #3a332d; background: #1f1915; color: #f7f3ee; border-radius: 8px; padding: 8px 14px; cursor: pointer; font-size: 14px; }
|
||
.nav .pptx { border-color: #e8b04b; color: #f2d3a0; }
|
||
@media print {
|
||
.nav, .num { display: none; }
|
||
.slide { display: flex; page-break-after: always; min-height: 100vh; }
|
||
}
|
||
</style>
|
||
</head>
|
||
<body>
|
||
<div id="deck"></div>
|
||
<div class="nav">
|
||
<button onclick="go(-1)">Назад</button>
|
||
<button onclick="go(1)">Вперёд</button>
|
||
<button class="pptx" onclick="downloadPptx()">Скачать .pptx</button>
|
||
</div>
|
||
<div class="num" id="num"></div>
|
||
<script>
|
||
// ============ ВСЁ СОДЕРЖАНИЕ ПРЕЗЕНТАЦИИ — ТОЛЬКО В ЭТОМ МАССИВЕ ============
|
||
var SLIDES = [
|
||
{ title: "Красивое позирование на фото", bullets: ["Как не стоять доской", "Автор / дата"] },
|
||
{ title: "Золотые правила", bullets: ["Расслабься и дыши", "Наклон корпуса чуть вперёд", "Взгляд — чуть выше объектива", "Двигайся между кадрами"] },
|
||
{ title: "Позы для всего тела", bullets: ["Открытая стойка под 45°", "Вес на одну ногу", "Плечи со сдвигом", "Шаг-раздвоение"] },
|
||
{ title: "Руки и детали", bullets: ["Руки: в карманы, на талию, у лица", "Не прижимай локти", "Плечо, талия, колено — в линию", "Одна конечность всегда свободная"] },
|
||
{ title: "Портрет и верх по пояс", bullets: ["Опора — рука, стол, стена", "Плечи вниз и назад", "Подбородок чуть вперёд", "Отойди от камеры на полшага"] },
|
||
{ title: "Лицо и взгляд", bullets: ["Расслабь челюсть", "Мягкая улыбка", "Взгляд чуть выше объектива", "Моргай между дёрганиями затвора"] },
|
||
{ title: "Типичные ошибки", bullets: ["Стоишь «доской»", "Локти прижаты к телу", "Зажатая шея", "Параллель встать к камере"] },
|
||
{ title: "Практика и итоги", bullets: ["Сними 20 кадров одной позы", "Сравни и выбери лучшие", "Главное: движение + дыхание"] }
|
||
];
|
||
// ============================================================================
|
||
var cur = 0;
|
||
function render() {
|
||
var deck = document.getElementById("deck");
|
||
deck.innerHTML = SLIDES.map(function (s, i) {
|
||
return '<section class="slide' + (i === cur ? " on" : "") + '"><h1>' + s.title + '</h1><ul>' +
|
||
s.bullets.map(function (b) { return "<li>" + b + "</li>"; }).join("") + "</ul></section>";
|
||
}).join("");
|
||
document.getElementById("num").textContent = (cur + 1) + " / " + SLIDES.length;
|
||
}
|
||
function go(d) { cur = Math.min(SLIDES.length - 1, Math.max(0, cur + d)); render(); }
|
||
document.addEventListener("keydown", function (e) {
|
||
if (e.key === "ArrowRight" || e.key === " ") go(1);
|
||
if (e.key === "ArrowLeft") go(-1);
|
||
});
|
||
function downloadPptx() {
|
||
var p = new PptxGenJS();
|
||
p.defineLayout({ name: "W", width: 13.33, height: 7.5 });
|
||
p.layout = "W";
|
||
SLIDES.forEach(function (s) {
|
||
var sl = p.addSlide();
|
||
sl.background = { color: "14100E" };
|
||
sl.addText(s.title, { x: 0.7, y: 0.5, w: 12, h: 1.2, fontSize: 36, bold: true, color: "F7F3EE" });
|
||
sl.addText(s.bullets.map(function (b) { return { text: b, options: { bullet: true, breakLine: true } }; }),
|
||
{ x: 0.9, y: 2.0, w: 11.5, h: 4.8, fontSize: 20, color: "E8E0D8", lineSpacingMultiple: 1.4 });
|
||
});
|
||
p.writeFile({ fileName: "pozovanie.pptx" });
|
||
}
|
||
render();
|
||
</script>
|
||
</body>
|
||
</html>
|