sozday-tehzadanie-dlya-sozda/index.html
2026-09-18 09:54:53 +00:00

78 lines
4.9 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>