1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/songjinyang-everyday

 / Детали:

Задача 16 // Если время между двумя кликами на странице превышает 5 секунд, выводить сообщение "Более 5...

Предстоит сделать
Владелец
Создано  
27.04.2025

секунд не было нажатий". Используйте Proxy и Object.defineProperty для решения. Если требуется более формализованный код, он может выглядеть следующим образом: javascript let lastClickTime = null; const handler = { get: function (target, prop) { if (prop === 'click') { return function (...args) { const currentTime = new Date().getTime(); if (lastClickTime !== null) { const timeDifference = currentTime - lastClickTime; if (timeDifference > 5000) { console.log('Более 5 секунд не было нажатий'); } } lastClickTime = currentTime; return target[prop].apply(target, args); }; } return Reflect.get(...arguments); } }; const proxy = new Proxy(document.body, handler); Object.defineProperty(proxy, 'addEventListener', { enumerable: true, configurable: true, writable: true, value: function (...args) { if (args[0] === 'click') { const originalClickHandler = args[1]; args[1] = function (...clickArgs) { const currentTime = new Date().getTime(); if (lastClickTime !== null) { const timeDifference = currentTime - lastClickTime; if (timeDifference > 5000) { console.log('Более 5 секунд не было нажатий'); } } lastClickTime = currentTime; return originalClickHandler.apply(this, clickArgs); }; } return Reflect.apply(...arguments); } }); Этот код использует Proxy и Object.defineProperty для перехвата событий клика и отслеживания времени между ними.

    // let cc = { 'newTime': new Date().getTime() }
        // Object.defineProperty(cc, 'cliTime', {
        //     get() {
        //         return this.newTime
        //     },
        //     set(value) {
        //         if (value - this.newTime > 5000) { 
        //             console.log('5s内没点了')  
               
        //         }
        //         this.newTime = value
        //     }
        // })
        // document.querySelector('#bod').onclick = function () {
        //     console.log('disn')
        //     cc.cliTime = new Date().getTime()
        // }
        let dd = {'_oldTime':new Date().getTime()}
        var pro = new Proxy(dd,{
                get(target,key){
                        // return ()=>{
                           return ()=>2                     // постарайтесь вернуть функцию, иначе будет ошибка
                        // }
                },
                set(target,key,value){
                    console.log(value)                                 
                    console.log(target['_oldTime'])
                    console.log(this)                   // здесь this указывает на текущий объект, то есть на второй параметр Proxy, а target — на первый параметр;
                    if(value-target['_oldTime']>5000) {
                        console.log('5 секунд не нажато')
                    }
                   target['_oldTime'] = value
                   target[key]=value
                }
        })
        document.querySelector('#bod').onclick = function () {
            console.log('disn')
            pro.time = new Date().getTime()
            console.log(pro==2)                                 // true  выводит объект
        }

Комментарий (0)

GitLife Service Account Задача создана

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/songjinyang-everyday.git
git@api.gitlife.ru:oschina-mirror/songjinyang-everyday.git
oschina-mirror
songjinyang-everyday
songjinyang-everyday