我发现可以调用外部javascript
在浏览器中使用我的交互式.swf
文档外部接口由 Adobe 提供。这意味着,例如,通过单击按钮,我可以触发javascript
命令(是的,我知道media9
媒体按钮。)但是,这在 LaTeX 生成的文件中似乎是不可能的.pdf
,因为只能导入.swf
文档本身没有附加的 js 命令。
如果不是这样,我也可以将其连接到其他交互式图形.swf
。media9
是否有解决方法或其他可能性来实现这一点?
编辑:让我们添加一个例子:连接hslider
来自这例如 media9。
编辑:扩展该示例:
这是滑块mxml
:
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
initialize="init();">
<mx:Script><![CDATA[
public function change():void {
flash.external.ExternalInterface.call("anim[’my_anim’].frameNum = 10","");
}
]]></mx:Script>
<mx:HSlider id="aSlider" width="100%"
minimum="0.1" maximum="3" value="0.1"
dataTipPlacement="top"
snapInterval="0.01" tickInterval="0"
labels="[a=0.1,3]"
allowTrackClick="true"
liveDragging="true"
change="change();"/>
</mx:Application>
如您所见,为了简单起见,只需将frameNum
另一个动画my_anim
(使用包创建animation
)的 设置为10
。但是我可以将这个 .swf 包含在 media9 中而没有任何问题,但滑动时没有响应。
我所做的事情可能有些荒谬,但是我的意图现在应该很清楚了。
答案1
本示例演示了使用 Flash 的外部接口。嵌入的 Flash 应用程序slider.swf
是一个简单的滑块,可以改变动画对象的frameNum
属性。
\documentclass{article}
\usepackage{animate,media9}
\begin{document}
\begin{animateinline}[label=my_anim,step]{1}
\multiframe{10}{i=0+1}{
\fbox{\Huge\i}
}
\end{animateinline}
\includemedia[activate=pageopen,width=0.5\linewidth,height=12ex]{}{slider.swf}
\end{document}
预编译的 Flash 应用程序可以在这里下载:https://agrahn.gitlab.io/swf/slider.swf
它的源文件slider.mxml
<?xml version="1.0"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script><![CDATA[
public function change():void {
flash.external.ExternalInterface.call("eval", "anim.my_anim.frameNum = "+String(int(aSlider.value)));
}
]]></mx:Script>
<mx:HSlider id="aSlider" width="100%"
minimum="0" maximum="9" value="0"
snapInterval="1" tickInterval="1"
labels="[0,9]"
allowTrackClick="true"
liveDragging="true"
change="change();"
/>
</mx:Application>
使用 Flex (flex.apache.org) 编译为 SWF
mxmlc -strict -warnings -compiler.as3 -static-link-runtime-shared-libraries -compiler.optimize -keep-generated-actionscript slider.mxml