Добавление тега <template>на веб-страницу и изменение его исходного положения с помощью перевода / преобразования - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть глупая веб-страница, которая представляет собой небольшой эксперимент, просто немного веселья. Страница состоит из тега <template> для добавления некоторого HTML в DOM либо при загрузке страницы, либо при некотором взаимодействии с пользователем. HTML - это 4 вложенных деления. Первый элемент div задает область для следующих двух соответствующих дочерних элементов div для анимации, поэтому он, кажется, подпрыгивает вокруг окна. Это прекрасно работает, когда я использую css ключевые кадры и анимирую, используя свойства translateX и translateY. Я доволен тем, что у меня есть. Если вы щелкнете по самому вложенному DIV (с именем класса "gustavo__image") или какой-нибудь текст на моей странице, другой шаблон внедряется в DOM. Это также прекрасно работает, но мне бы хотелось, чтобы начальная позиция каждого дублированного (а не первого) рендеринга шаблона начиналась с другого места. Это так, что анимация не такая повторяющаяся.

В моем коде я определяю, будет ли шаблон дубликатом, и пытаюсь установить свойства преобразования для этого DIV, например,

var gustavoTemplate = document.getElementsByTagName('template')[0];

    if(isDuplicate) {
        gustavoTemplate.getElementsByClassName('gustavo__x')[0].style.transform = 'translate(100px)';
    }
* 1009. * Однако это не сработает, поскольку я знаю, gustavoTemplate.getElementsByClassName('gustavo__x')[0] будет пустым.

При просмотре моего кода нужно ли ждать, пока я добавлю шаблон, чтобы установить его отправную точку? Могу ли я даже установить положение введенных DIV с помощью преобразования? Любая помощь приветствуется, и если я неправильно сформулировал это, пожалуйста, скажите, и я переделаю.

Вот полный код (jsBin здесь: https://jsbin.com/hirehen/edit?html, css, js, вывод )

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <title>I love Safety io</title>
</head>
<style>
    body {
        background-color: DeepSkyBlue;
        color: LightSeaGreen;
        font-size: 5em;
        font-family: Helvetica, sans-serif;
        padding: 10px 10px;
        font-weight: bold;
    }

    .intro {
        color: white;
    }

    .gustavo {
        position: absolute;
        width: 100vw;
        height: 100%;
        top: 0px;
        left: 0;
        z-index: 1000;
        pointer-events: none;
    }

    .gustavo__x {
        animation: x 13s linear infinite alternate;
        pointer-events: none;
    }

    .gustavo__y {
        animation: y 7s linear infinite alternate;
        pointer-events: none;
    }

    .gustavo__image {
        background-image: url('Gustavo-Small.png');
        background-repeat: no-repeat;
        background-position: center;
        height: 290px;
        width: 290px;
        pointer-events: all;
    }

    @keyframes x {
        100% {
            transform: translateX(calc(100vw - 290px));
        }
    }

    @keyframes y {
        100% {
            transform: translateY( calc(100vh - 290px));
        }
    }

</style>

<body>
    <div class="intro" onclick="showAnotherGustavo()">Want to see more?</div>
    <template>
        <div class="gustavo">
            <div class="gustavo__x">
                <div class="gustavo__y">
                    <div class="gustavo__image" onclick="showAnotherGustavo()"></div>
                </div>
            </div>
        </div>
    </template>
</body>
<script>
    function showGustavo(isDuplicate) {
        var gustavoTemplate = document.getElementsByTagName('template')[0];
        // I want to change the starting point? But this doesn't work...
        if(isDuplicate) {
            // I need to set the transform properties of the divs with  gustavo__x and gustavo__y classes
            //gustavoTemplate.getElementsByClassName('gustavo__x')[0].style.transform = 'translate(100px)';
        }

        var clone = gustavoTemplate.content.cloneNode(true);

        document.body.appendChild(clone);
    }

    function showAnotherGustavo() {
        showGustavo(true);
    }

    window.onload = () => {
        showGustavo()
    }
</script>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...