我正在使用
JavaFX应用程序,其中包含由内部webkit浏览器呈现的几个html,css,JS文件.现在,问题是CSS动画在JavaFX提供的webkit浏览器中没有得到顺利的呈现,但Firefox或chrome中的相同代码却相当平滑.
此外,没有持久性可用(目前在Java中使用变量,并通过JS进行持久性通信).
我正在寻找的是有任何方法来整合一些无头浏览器,或一些设置,使CSS动画更流畅.只有我遇到的是Jxbrowser,但是对于个人使用来说太贵了.
代码:
public class Main extends Application { private Scene scene; Mybrowser mybrowser; String completeText = ""; @Override public void start(Stage primaryStage) throws Exception{ primaryStage.setTitle("Frontend"); java.net.CookieManager manager = new java.net.CookieManager(); java.net.CookieHandler.setDefault(manager); mybrowser = new Mybrowser(); scene = new Scene(mybrowser,1080,1920); primaryStage.setScene(scene); primaryStage.setFullScreen(true); primaryStage.show(); // @ being the escape character scene.setonKeyTyped(new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { String text = event.getCharacter(); if (text.equals("0")) { String tempText = completeText; completeText = ""; processtext(tempText); }else { completeText = completeText+text; } } }); } }
Mybrowser:
public class Mybrowser extends Region { public Mybrowser() { webEngine.getLoadWorker().stateproperty().addListener((observable,oldValue,newValue) -> { if (newValue == Worker.State.SUCCEEDED) { JSObject window = (JSObject) webEngine.executeScript("window"); window.setMember("app",this); } }); URL urlHello = getClass().getResource(hellohtml); webEngine.load(urlHello.toExternalForm()); webView.setPrefSize(1080,1920); webView.setContextMenuEnabled(false); getChildren().add(webView); }
包含动画的CSS代码:
#ball-container.go #ball{ -webkit-animation: rotating-inverse 2s ease-out 0s 1 normal; animation: rotating-inverse 2s ease-out 0s 1 normal; } #ball-container { height: 102px; width: 102px; position: absolute; top: -95px; left: 480px; -webkit-transition: all 0.9s ease-in-out 0s; transition: all 0.9s ease-in-out 0s; } #ball-container.shake .ball-wrapper{ -webkit-animation: yAxis 0.9s ease-in-out; animation: yAxis 0.9s ease-in-out; }
谢谢.
解决方法
尝试使用
Java 8u112,基于您的代码,我创建了一个工作示例(使用Java JDK 8u112 64位测试):
import javafx.application.Application; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; import javafx.stage.Stage; public class Example extends Application { public static void main(String[] args) { launch(args); } class Mybrowser extends Parent { private WebEngine webEngine; private WebView webView; public Mybrowser() { webView = new WebView(); webEngine = webView.getEngine(); // Ugly (but easy to share) HTML content String pageContents = "<html>" + "<head>" + "<style>" + "@-webkit-keyframes mymove {" + "from {top: 0px;}" + "to {top: 50px;}" + "}" + ".Box { " + "width: 150px; " + "position: relative; " + "height: 150px; " + "background: red; " + "margin-top: 35px; " + "margin-left: auto; " + "margin-right: auto; " + "-webkit-transition: background-color 2s ease-out; " + "-webkit-transition: all 1s ease-in-out; " + "}" +".Box:hover {" +" background-color: green;" + "width:350px;" + "-webkit-animation: mymove 1s infinite;" +"}" + "</style>" + "</head>" + "<body>" + "<div class='Box'></div>" + "</body>" + "</html>"; webEngine.loadContent(pageContents); webView.setContextMenuEnabled(false); getChildren().add(webView); } } private Scene scene; Mybrowser mybrowser; @Override public void start(Stage primaryStage) throws Exception { primaryStage.setTitle("Frontend"); mybrowser = new Mybrowser(); scene = new Scene(mybrowser); primaryStage.setScene(scene); primaryStage.show(); } }
我怀疑这是因为他们现在正在使用一个较新的webkit JDK-8156698,但它可能是以前的错误(可以看看8u112 bug fixes列表.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。