Javascript – Webapp-JS-Countdown-Problem
某草草
某草草 2017-05-19 10:14:09
0
2
849

Jetzt stehe ich vor einem solchen Problem:

对于webapp 有一个活动列表,列表里每个活动有一个倒计时,
一旦把app切入后台,js 计时器就不在生效了,导致倒计时不准确,
有想过解决方法,监听visibilitychange事件,观察document.visibilityState

Ich möchte eine Komponente oder Funktion erstellen, die alle Countdown-Probleme auf der Seite lösen kann,
aber ich stecke bei meiner Idee fest und frage mich, ob die Experten gute Ideen, Lösungen oder Informationen haben?
Vielen Dank!


Ergänzungsfrage:

  1. Als ich den Timer auf meinem Telefon debuggte, öffnete ich dieselbe Seite in WeChat und im Standardbrowser meines Telefons,
    schaltete jeweils in den Hintergrund und stellte fest, dass der Seiten-Timer in WeChat noch lief, und zwar im Standardbrowser hatte aufgehört zu laufen.

  2. Beim Drucken im Standardbrowser des Mobiltelefons ist document.visibilityState undefiniert, aber wenn die Webseite in WeChat ausgeführt wird, kann sie normal gedruckt werden.

Entschuldigung, warum? Hat WeChat etwas dagegen unternommen?

某草草
某草草

Antworte allen(2)
小葫芦

与手机系统时间进行比较;
如果还不放心,在app 打开的时候与后端的系统时间进行比较。

漂亮男人
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
</head>
<body>
    <p id="app">
        <ul>
            <li v-for="item in items">
                <com1 :value="item.time"></com1>
            </li>
        </ul>
    </p>

    <script src="https://cdn.bootcss.com/moment.js/2.17.1/moment.min.js"></script>
    <script src="http://cdn.bootcss.com/rxjs/5.2.0/Rx.min.js"></script>
    <script src="http://cdn.bootcss.com/vue/2.1.0/vue.min.js"></script>

    <script>
        const source = Rx.Observable.interval(1000);

        Vue.component('com1', {
            props: ['value'],
            data() {
                return {
                    count: null,
                }
            },
            created() {
                source.subscribe(count => this.count = count % 2);
            },
            template: '<p>距离 {{ value | date("HH:mm:ss") }} 还有 {{ seconds }}s</p>',
            computed: {
                seconds() {
                    this.count;
                    return Math.abs(moment().diff(this.value, 'seconds'));
                }
            },
            filters: {
                date(val, format) {
                    if (val) return moment(val).format(format || 'YYYY-MM-DD HH:mm:ss')
                    return val
                }
            }
        });

        new Vue({
            el: '#app',
            data() {
                return {
                    items: []
                }
            },
            created() {
                for (var i = 0; i < 10; i++) {
                    this.items.push({
                        time: moment().add(i + 1, 'hours')
                    })
                }
            }
        })
    </script>
</body>
</html>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage