javascript - 如何在 Plotly 中单击图像时更改图像?
问题描述
在我的应用程序中,我需要在单击图像时更改图像。我怎样才能做到这一点?
文件夹结构:
- app.py
- assets/
|-- custom-script.js
应用程序.py
app = dash.Dash(__name__)
app.layout = html.Div(
[
html.Img(
className="myImg",
id="speak_btn",
src="assets/img/microphone.png",
style={},
),
])
自定义脚本.js
$(document).ready(function () {
$(".myImg").click(function () {
if ($(this).attr("src") === "assets/img/microphone.png")
$(this).attr("src", "assets/img/voice_gif.gif");
else if ($(this).attr("src") === "assets/img/voice_gif.gif")
$(this).attr("src", "assets/img/microphone.png");
})
});
这是了解我为什么将其放在资产文件夹中的指南 https://dash.plotly.com/external-resources
经过custom-script.js
测试并且可以正常工作。需要帮助使其适应破折号。谢谢
解决方案
您可以app.clientside_callback()
像这样运行 JS 客户端:
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
app = dash.Dash(__name__)
app.layout = html.Div([
html.Img(id='speak_btn', src='assets/img/microphone.png', className='myImg', n_clicks_timestamp=0)
])
app.clientside_callback(
"""
function(click, src) {
if ( src == 'assets/img/microphone.png' && click != 0 ) {
return 'assets/img/voice_gif.gif';
} else {
return 'assets/img/microphone.png';
}
}
""",
Output('speak_btn', 'src'),
[Input('speak_btn', 'n_clicks_timestamp')],
[State('speak_btn', 'src')]
)
if __name__ == '__main__':
app.run_server()
你也可以在没有 JS 的情况下完成这个任务,方法是编写一个回调来更改每次更新的src
属性,如下所示:html.Img
n_clicks_timestamp
import dash
from dash.dependencies import Input, Output, State
import dash_html_components as html
from dash.exceptions import PreventUpdate
app = dash.Dash(__name__)
microphone = 'assets/img/microphone.png'
voice_gif = 'assets/img/voice_gif.gif'
app.layout = html.Div([
html.Img(id='speak_btn', src=microphone, className='myImg', n_clicks_timestamp=0)
])
@app.callback(
Output('speak_btn', 'src'),
[Input('speak-btn', 'n_clicks_timestamp')],
[State('speak_btn', 'src')])
def change_img(click, src):
if not click: raise PreventUpdate
return gif if src==microphone else microphone
if __name__ == '__main__':
app.run_server()
推荐阅读
- jq - 如何检查 jq 中的可选字段?
- angular - ngFor多维json对象
- arduino - 将十六进制字符串颜色转换为 uint_16
- javascript - 缩小画布元素然后获取 imageData
- python - requests-html "RuntimeError: 在烧瓶端点上使用线程 'Thread-1' 时没有当前事件循环
- javascript - javascript如何在主题标签上进行正则表达式匹配和替换但排除主题标签字符
- vue.js - 使用 laravel-mix webpack 中的“extract”方法提取 Vue 时是否有 bug
- angular - 有没有办法通过将服务注入/导入到不是组件/服务/存储库的类中来提高代码质量?
- python - 为什么我得到“支持的目标类型是:('binary', 'multiclass')。改为'continuous'。” 错误?
- javascript - 组件渲染两次