javascript - 这个极好的网站是如何构建的?

标签 javascript html text

我昨晚发现了一个非常棒的网站。这是网址:

http://yourworldoftext.com/

警告:网站可能是 NSFW。

这让我立刻想到了这个网站是如何构建的。查看页面源代码并没有透露太多信息,但如果我在 Firebug 中查看它,我会看到很多这样的表格:

<div class="tilecont" style="top: 994px; left: 1320px;">
    <table width="100%" cellspacing="0" cellpadding="0" border="0">
        <tbody>
            <tr>
                <td>A</td>
                <td>L</td>
                <td>L</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            <tr>
            <tr>
                <td>Y</td>
                <td>O</td>
                <td>U</td>
                <td>R</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            <tr>
            <tr>
                <td>B</td>
                <td>A</td>
                <td>S</td>
                <td>E</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
                <td>&nbsp;</td>
            <tr>
    </table>
</div>

tilecont DIV 在整个页面上重复平铺,里面的表格占据了那个 DIV 的整个宽度和高度。然后,每个 <tr>表格里面是一行 16 <td>在那一行中组成每个字符。

这很难解释,如果你安装了 Firebug,你可以简单地将它拖到页面上,自己看看。

我认为这非常聪明,但我无法思考如何将它存储在数据库或其他东西中?我已经尝试查看 JS 文件,但老实说,里面有很多东西我不知道或与它的存储方式无关等。我假设它在每个 keyUp 上向数据库发出 AJAX 请求。存储特定“单元格”的新数据的事件?

有人对他们认为这是如何完成的有任何意见吗?

最佳答案

您可能大致是正确的。该站点知道您的视口(viewport)在哪里,并且仅以 16 个字符的“ block ”加载可见的部分。数据库仅保存 16 个带有 x 和 y 坐标的字符字符串。如果快速拖动,您可以看到它以 1x16 block 的形式更新。

至于发送,如果是我,我会缓存文本并且一次只发送一个 16 字符的“ block ”。每次发生编辑时,检查它是否与上一个编辑在同一 block 中。如果没有发送最后一个 block 并开始缓存新的 block 。

要使 View 保持最新,您可以通过使用 window.setInterval() 每隔几秒发送一个 ajax 请求,让它检查 View 区域中的更改。它可以发回一些 JSON 或仅包含发生变化的 block 的东西,可能在前几个字符中使用它们在网格中的位置进行编码。

我只是在这里挥手,我没有看过代码,但你是对的。这是一个迷人的网站。

编辑:更多细节...

查看 init() 函数(yourworld.js 中的第 906 行)。如果您想研究代码,那是最好的切入点。您可以在第 953 行看到编辑的工作原理。在 keydown 上,脚本聚焦一个隐藏的输入元素,该元素捕获文本。然后,他使用 setInterval 回调,每隔 10 毫秒从输入字段中获取第一个字符,然后将字段留空。如果有一个字符,那么它会被缓存在一个数组中并放入网格的事件单元格中。他在评论中说这是为了防止粘贴。

编辑数组每两秒发送一次(第 1017 行)。输入的每个字符都带有位置和时间戳。

fetchUpdates() 处理从服务器获取最新更新的单元格(第 383 行)。它包含一个 jQuery.ajax 请求,成功时回调一个函数,该函数进行必要的更改并在 1 秒后再次调用 fetchUpdates() setTimeout()

关于javascript - 这个极好的网站是如何构建的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3142046/

相关文章:

parsing - 在 Haskell 中派生 Read(和 Show)时避免反斜杠编码 utf8 字符

javascript - 使用 javascript 和 HTML 将下拉组合框添加到 innerHTML 中

javascript - 如何在 contenteditable 上实现断行和段落?

python - 在服务器上运行Python脚本(是否必须在/cgi-bin/中)?

jquery - CodeMirror - 乘法代码块

javascript - 如何获取 <svg> 的所有innerHTML以及所有嵌套的<g> <path>?

java - 使用用户输入从分隔文本文件中删除特定行。 ( java )

javascript - ReactJS setState 来自异步回调

javascript - Cesium:动态改变实体位置

javascript - 创建文本节点并添加 CSS