第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

語(yǔ)法熒光筆無(wú)法更新文本

語(yǔ)法熒光筆無(wú)法更新文本

臨摹微笑 2023-08-24 10:26:59
我正在嘗試使用 HTML 制作一個(gè)代碼編輯器:<!DOCTYPE html><html><head>    <meta charset='UTF-8'>    <meta http-equiv='X-UA-Compatible' content='IE=Edge'>    <meta name='viewport' content='width=device-width, initial-scale=1'>    <link rel='stylesheet' href='style.css'></head><body>    <pre id='editor'><code contenteditable='true'></code></pre>        <script type='module'>        import { highlight } from './highlighter.js';        import { Caret } from './caret.js';        (() =>        {            const editor = document.querySelector('#editor code');            const caret = new Caret(editor);            highlight(editor);            editor.addEventListener('input', e =>            {                highlight(editor);                e.preventDefault();            });            editor.addEventListener('keydown', e =>            {                const TAB   = 9;                const ENTER = 13;                switch (e.keyCode)                {                    // ...                }            });        })();    </script></body></html>熒光筆.js:import { Caret } from './caret.js';export function highlight(editor){    // ...    const NORM = '#E6E6FA';    // ...    const Highlighter = {        source: editor.innerText,        start: 0,        curr: 0,        // ...        fin()        {            return this.curr >= this.source.length;        },        advance()        {            return this.source[this.curr++];        },        // ...        scan()        {            let result = '';            this.start = this.curr;            if (this.fin())            {                return null;            }基本上,它獲取用戶代碼的文本內(nèi)容,掃描它以生成帶有顏色數(shù)據(jù)的詞素,將這些詞素拆分為字符,并將其放入帶有顏色的 <span> 標(biāo)簽中,然后將這些 <span> 附加到字符串中編輯器的innerHTML更新為,最后用戶的光標(biāo)放回到正確的位置;這是根據(jù)輸入完成的。但有一個(gè)問(wèn)題:如果用戶輸入速度太快,他們輸入的文本可能會(huì)加倍。我嘗試使用其他類型的事件偵聽器來(lái)解決此問(wèn)題,并嘗試簡(jiǎn)單地使用 setInterval,但效果并不好。
查看完整描述

1 回答

?
守著一只汪

TA貢獻(xiàn)1872條經(jīng)驗(yàn) 獲得超4個(gè)贊

從你所描述的情況來(lái)看


如果用戶輸入太快


并看到在元素highlight()的每次更改時(shí)都會(huì)調(diào)用計(jì)算量大的函數(shù)input


editor.addEventListener('input', e => {

? highlight(editor); // <--

? e.preventDefault();

});

我建議取消該調(diào)用以突出顯示。


嘗試這樣的事情:

// Vanilla debounce: https://gist.github.com/peduarte/7ee475dd0fae1940f857582ecbb9dc5f


function debounce(func, wait = 100) {

? let timeout;

? return function(...args) {

? ? clearTimeout(timeout);

? ? timeout = setTimeout(() => {

? ? ? func.apply(this, args);

? ? }, wait);

? };

}


// ...


// adjust delay to find a balance between responsiveness and performance

const delay = 500;?


const runHighlight = () => highlight(editor);

const debouncedHighlight = debounce(runHighlight, delay);


editor.addEventListener('input', e => {

? e.preventDefault();

? debouncedHighlight();

});


查看完整回答
反對(duì) 回復(fù) 2023-08-24
  • 1 回答
  • 0 關(guān)注
  • 268 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)