将 JavaScript 添加到我的 Plotly Dash 应用程序 (Python)

塞巴斯蒂安·梅科夫斯基

我正在使用 Python 中的 Dash 构建仪表板。我已经很好地配置了所有图形(它在这里服务器上运行),下一步是创建一个响应式导航栏和一个页脚。目前看起来像这样:

在此处输入图片说明

当我缩小宽度时,它看起来像这样:

在此处输入图片说明

我想为此按钮添加功能,以便在单击时隐藏三个链接。我正在尝试使用 JavaScript 和这段代码切换 CSS 'active' 属性:

 var toggleButton = document.getElementsByClassName('toggle-button')[0]
 var navBarLinks = document.getElementsByClassName('navbar-links')[0]

 function toggleFunction() {
     navBarLinks.classList.toggle('active')
 }

 toggleButton.addEventListener('click', toggleFunction)

基本上,当navbar-links类处于活动状态时,我希望将其设置为display: flex,而当它不处于活动状态时,我希望将其设置为display: none

Python screen 中定义的 HTML 元素在这里:

    html.Nav([

    html.Div('Covid-19 global data Dashboard', className='dashboard-title'),

    html.A([html.Span(className='bar'),
            html.Span(className='bar'),
            html.Span(className='bar')],
           href='#', className='toggle-button'),

    html.Div(
        html.Ul([
            html.Li(html.A('Linked-In', href='#')),
            html.Li(html.A('Source Code', href='#')),
            html.Li(html.A('CSV Data', href='#'))
        ]),
        className='navbar-links'),

], className='navbar')

我没想到通过 JavaScript 访问元素会出现问题。在做了一些研究之后,我发现 JavaScript 在执行getElementsByClassName函数时返回的值为 null。那是因为该函数在呈现页面之前运行(据我所知)。它给了我这个错误:

在此处输入图片说明

这个项目越来越大了,所以不知道这篇文章应该包括哪些部分,但我会分享git存储库页面预览有没有简单的解决方法?

巴斯范德林登

Dash 回调解决方案(无 Javascript):

import dash
import dash_html_components as html
from dash.dependencies import Output, Input, State

navbar_base_class = "navbar-links"

app = dash.Dash(__name__)

app.layout = html.Nav(
    [
        html.Div("Covid-19 global data Dashboard", className="dashboard-title"),
        html.A(
            id="toggle-button",
            children=[
                html.Span(className="bar"),
                html.Span(className="bar"),
                html.Span(className="bar"),
            ],
            href="#",
            className="toggle-button",
        ),
        html.Div(
            id="navbar-links",
            children=html.Ul(
                children=[
                    html.Li(html.A("Linked-In", href="#")),
                    html.Li(html.A("Source Code", href="#")),
                    html.Li(html.A("CSV Data", href="#")),
                ],
            ),
            className=navbar_base_class,
        ),
    ],
    className="navbar",
)


@app.callback(
    Output("navbar-links", "className"),
    Input("toggle-button", "n_clicks"),
    State("navbar-links", "className"),
    prevent_initial_call=True,
)
def callback(n_clicks, current_classes):
    if "active" in current_classes:
        return navbar_base_class
    return navbar_base_class + " active"


if __name__ == "__main__":
    app.run_server(debug=True)

上面的代码的想法是采取toggle-button咔嗒Input和当前值navbar-linksState我们可以使用这个状态来确定我们是否应该添加active类或删除它。className值在回调中返回。


Javascript 解决方案:

window.addEventListener("load", function () {
  var toggleButton = document.getElementsByClassName("toggle-button")[0];
  var navBarLinks = document.getElementsByClassName("navbar-links")[0];

  function toggleFunction() {
    navBarLinks.classList.toggle("active");
  }

  toggleButton.addEventListener("click", toggleFunction);
});

load 事件在整个页面加载后触发,包括所有依赖资源,如样式表和图像。这与 DOMContentLoaded 形成对比,DOMContentLoaded 在页面 DOM 加载后立即触发,无需等待资源完成加载。

https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event

DOMContentLoaded最好使用,但它只适用于我的load.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将库添加到我的应用程序

如何正确地将 javascript 库添加到我的 rails 应用程序中

将python包添加到我的应用程序库时的级联依赖性

将水平线添加到Dash-Plotly Python仪表板

我需要使用他们的Facebook ID javascript将Facebook照片流添加到我的应用程序中

将PostgreSQL安装程序添加到我自己的应用程序安装程序中

JavaScript:将索引号添加到我的数组元素的函数不断应用索引号

我如何将Listview标头添加到我的应用程序

将Pushe unity插件添加到我的android应用程序时出错

将模块添加到我的 Android 应用程序时出现 DuplicateFileException

无法将库添加到我的应用程序中?

将 TextInput 添加到我的应用程序时出现 SyntaxError

将按钮添加到我的React Native应用程序时出现错误?

将应用程序博客添加到我的 Django 项目

将Rich Cards数据添加到我的dotnet应用程序会导致崩溃

将 nginx 添加到我的 dockerized Django 应用程序

如何停止将Boost动态链接添加到我的应用程序中?

是否应该使用FireDAC将FDGuixWaitCursor添加到我的应用程序中?

如何将Skeleton.css添加到我的React应用程序?

将 jQuery 表编辑插件添加到我的 rails 5 应用程序

如何将Alertdialog添加到我的Android应用程序?

如何将本地存储添加到我的 React.js 应用程序?

无法将范围添加到我的Azure AD应用程序

将jQuery插件添加到我的Rails 4应用程序中

将文本格式添加到我的 NodeJS 应用程序的评论部分

Vue js 将外部脚本文件添加到我的应用程序

将 Postgresql 添加到我的 Heroku 应用程序 - 语法崩溃查询的问题?

仅使用“ Web应用程序”方法将Firebase添加到我的Cordova应用程序是否可行?

将jQuery添加到我的Javascript文件中