仅当浏览器开发人员工具面板处于打开状态时,才能使用JavaScript

时间:2019-02-15 作者:goferstack

在进入滚动的视口时,正在制作一个字体很棒的图标,以便CSS制作动画。只有在Mac上的各种浏览器(Chrome、Safari、Firefox)中打开“开发人员工具”面板时,才会按预期运行。

它在iPhone 6+上的iOS 12上的Chrome中也能工作。

通过向元素添加一个新的throwaway类来实现,然后在进入视口时用动画CSS替换该类。

对此做了一些研究,这可能是一个DOM加载问题——这对这个刚出生的开发人员来说是一个深层次的问题!

JS被放入代码段插件中,如下所示:

<? php
function playon_view(){ //wrap it in php
?>
<script>

const animateHTML = function() {
    let elems;
    let windowHeight;

    function init() {
        elems = document.querySelectorAll(\'.fodder\'); //new throwaway class
        windowHeight = window.innerHeight;
        addClass();
        addEventHandlers();
        checkPosition();
    }

    function addClass() {
        const testarray = document.getElementsByClassName(\'fa-quote-left\'); //target the quote icon
        for (let i = 0; i < testarray.length; i++) {
            testarray[i].className += \' fodder\'; //add the new class
        }
    }

    function addEventHandlers() {
        window.addEventListener(\'scroll\', checkPosition);
        window.addEventListener(\'resize\', init);
    }

    function checkPosition() {
        for (let i = 0; i < elems.length; i++) {
            const positionFromTop = elems[i].getBoundingClientRect().top;
            if (positionFromTop - windowHeight <= 0) {
                elems[i].className = elems[i].className.replace(
                    \'fodder\', //throw away the class
                    \'quotate\', //replace the class with the animation class
                );
            }
        }
    }
    return {
        init,
    };
};
animateHTML().init();

</script>
<?php
}
add_action(\'wp_footer\', \'playon_view\');

1 个回复
最合适的回答,由SO网友:tmdesigned 整理而成

这实际上是一个JavaScript问题,而不是WordPress问题。你只是碰巧在WordPress挂钩上运行它。将来,您将有更好的运气在StackOverflow上发布此类问题。

然而,我将注意到该文件。querySelectorAll不是实时更新列表。调用它时,它会查询DOM,然后就完成了。由于它是init()函数的第一行,所以在添加任何“fodder”类之前,它不会返回任何内容。换句话说,首先执行addClass(),然后执行查询选择器。

相关推荐

JavaScript in a PHP plugin

我正在编写一个插件(在PHP中),它输出array.生成的数组应该是某个JavaScript文件的输入,该文件根据数组输出图表(.png图像)。考虑到这一点,我应该将变量从PHP插件传递给JavaScript(如图所示here).我想知道使用插件的过程是否与普通PHP文件不同。。。JS图表应根据用户操作显示。简而言之:如何调用JS文件,通过普通插件向其传递变量?