javascript – 如何在QML中创建延迟功能?

前端之家收集整理的这篇文章主要介绍了javascript – 如何在QML中创建延迟功能?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在 javascript中创建一个延迟函数,它需要一段时间的参数来延迟,所以我可以使用它在QML应用程序中执行 JavaScript行之间引入延迟.它可能看起来像这样:
function delay(delayTime) {
// code to create delay
}

我需要body的函数delay().请注意,javascript的setTimeout()在QML中不起作用.

解决方法

如您对此问题的意见所建议的,Timer组件是一个很好的解决方案.
function Timer() {
    return Qt.createQmlObject("import QtQuick 2.0; Timer {}",root);
}

timer = new Timer();
timer.interval = 1000;
timer.repeat = true;
timer.triggered.connect(function () {
    print("I'm triggered once every second");
})

timer.start();

以上将是我如何使用它,这是我可能在你的问题中实现了这个例子.

function delay(delayTime) {
    timer = new Timer();
    timer.interval = delayTime;
    timer.repeat = false;
    timer.start();
}

(没有做任何事情;继续阅读)

虽然您正在寻找实现它的确切方式表明您正在寻找阻止,直到您的程序的下一行执行.但是,这并不是一个非常好的方式,因为它也会阻止程序中的所有其他内容,因为JavaScript只能在一个执行线程中运行.

另一种方法是传回回调.

function delay(delayTime,cb) {
    timer = new Timer();
    timer.interval = delayTime;
    timer.repeat = false;
    timer.triggered.connect(cb);
    timer.start();
}

这将允许您使用它.

delay(1000,function() {
    print("I am called one second after I was started.");
});

希望有帮助!

编辑:以上假设您正在单独的JavaScript文件中工作,以后您将导入到QML文件中.要直接在QML文件中执行等效操作,可以这样做.

import QtQuick 2.0

Rectangle {
    width: 800
    height: 600

    color: "brown"

    Timer {
        id: timer
    }

    function delay(delayTime,cb) {
        timer.interval = delayTime;
        timer.repeat = false;
        timer.triggered.connect(cb);
        timer.start();
    }

    Rectangle {
        id: rectangle
        color: "yellow"
        anchors.fill: parent
        anchors.margins: 100
        opacity: 0

        Behavior on opacity {
            NumberAnimation {
                duration: 500
            }
        }
    }

    Component.onCompleted: {
        print("I'm printed right away..")
        delay(1000,function() {
            print("And I'm printed after 1 second!")
            rectangle.opacity = 1
        })
    }
}

我不相信这是解决你实际问题的方法;要延迟动画,可以使用PauseAnimation.

猜你在找的JavaScript相关文章