django 脚本JS只能在HTML页面上工作,有没有办法让它工作并包含HTML的路径?

p5fdfcr1  于 2023-01-10  发布在  Go
关注(0)|答案(1)|浏览(287)

我有一个问题,我有一个html 'p'标签,它应该适用于一个javascript函数。这是一个动画打字脚本,但它似乎不工作。脚本只有当我把它放在下面的html 'p'标签。

<link href="{% static 'js/animation.js' %}" rel="stylesheet"/>

 <!--test active type writing animation-->
                <div class="container-animation">
                <p id="p_type">I'm <span class="typed-text"></span><span class="cursor">&nbsp;</span></p>
                </div>
<!-- To check , how to implement the script in js file and why it isn't working and only working-->

                <script>
const typedTextSpan = document.querySelector(".typed-text");
const cursorSpan = document.querySelector(".cursor");

const textArray = ["a Data Analyst", "a Developer", "Henry Dumont"];
const typingDelay = 100;
const erasingDelay = 100;
const newTextDelay = 2000; // Delay between current and next text
let textArrayIndex = 0;
let charIndex = 0;

function type() {
  if (charIndex < textArray[textArrayIndex].length) {
    if(!cursorSpan.classList.contains("typing")) cursorSpan.classList.add("typing");
    typedTextSpan.textContent += textArray[textArrayIndex].charAt(charIndex);
    charIndex++;
    setTimeout(type, typingDelay);
  }
  else {
    cursorSpan.classList.remove("typing");
    setTimeout(erase, newTextDelay);
  }
}

function erase() {
    if (charIndex > 0) {
    if(!cursorSpan.classList.contains("typing")) cursorSpan.classList.add("typing");
    typedTextSpan.textContent = textArray[textArrayIndex].substring(0, charIndex-1);
    charIndex--;
    setTimeout(erase, erasingDelay);
  }
  else {
    cursorSpan.classList.remove("typing");
    textArrayIndex++;
    if(textArrayIndex>=textArray.length) textArrayIndex=0;
    setTimeout(type, typingDelay + 1100);
  }
}

document.addEventListener("DOMContentLoaded", function() { // On DOM Load initiate the effect
  if(textArray.length) setTimeout(type, newTextDelay + 250);
});
</script>

为什么代码不工作,如果它保存在一个文件中,并在头脚本调用。它只工作时,代码是写在脚本html标签?

我希望在头中调用脚本,并在html页面中进行硬编码。

fjaof16o

fjaof16o1#

首先,您的链接引用了样式表

<link href="{% static 'js/animation.js' %}" rel="stylesheet"/>

而不是

<script src="{% static 'js/animation.js' %}" ></script>

但即使假设这是复制错误,由于脚本引用了页面中的元素,因此需要先加载这些元素,脚本才能工作。
标签,它们将首先加载。但是如果你把脚本放在头中,它可能会在页面的其他部分加载之前运行,这意味着你的查询选择器(例如document.querySelector(".typed-text"))将找不到任何东西。
避免这种情况的方法是在头文件中调用脚本时使用defer,例如,

<script src="{% static 'js/animation.js' %}" defer ></script>

这将阻止脚本在页面加载之前运行。

相关问题