gpt4 book ai didi

javascript - 从服务器中的文档中获取 HTML 元素并在客户端中动态显示它们

转载 作者:行者123 更新时间:2023-11-30 10:36:01 24 4
gpt4 key购买 nike

上下文

我正在制作一个应用程序,用于在无法访问互联网的无线局域网中向大约 50 名观众展示同步的 HTML5 幻灯片。

我在其中一台计算机上运行 Node.js 服务器,并通过 Socket.IO 连接 50 个客户端(顺便说一句,只有其中一个客户端控制演示)。

硬件是家用无线 802.11b/g 路由器和 50 台移动设备(平板电脑、上网本、智能手机)。

问题

当幻灯片开始播放时,客户端需要花费很长时间才能看到它(对于 5 MB 的幻灯片大约需要 10 分钟或更长时间),因为路由器必须同时向所有客户端发送完整的幻灯片。

我的幻灯片看起来如何

<html>
<head>
<title>My Slideshow</title>
<script src="javascripts/slidesplayer.js"></script>
<link rel="stylesheet" href="/stylesheets/style.css">
</head>

<body>
<div id="slides-containter">

<div class="slide" id="slide_1">
<!--Contents such as images, text, video and audio sources -->
</div>

<div class="slide" id="slide_2">
<!--Contents -->
</div>

<!--A bunch of slides here-->

</div>
<script>
// Here I load the slides
</script>
</body>
</html>

我想做什么

一开始,我想加载完全空的 slides-container 元素。

然后,当我放映幻灯片时,我想从服务器获取代表下一张幻灯片的 div,并将其附加到 DOM,以便仅当完成后,客户端开始下载图片和其他东西只为那张幻灯片(因此,显着减少我的网络过载)。

另一个相关事实是,幻灯片(包括 slidesplayer.js)是从将 PowerPoint 演示文稿解析为这种 HTML5 格式的外部软件自动生成的,我们将使用很多演示文稿已在 PowerPoint 中制作。

我的第一印象是我应该通过使用 jQuery-ajax 来完成此操作,但我不知道如何以正确的方式做到这一点,因为我的想法只是复制 div.slide单独文件中的元素。

更新: This answer建议在显示之前使用 jQuery 进行 DOM 操作。似乎每次您操作 DOM 对象时 jQuery 都会请求资源,即使它没有插入到您当前的 DOM 中也是如此。因此,一种可能的解决方案是仅使用字符串。您可以在 this 中查看有关此问题的更多信息和 this问题。

最佳答案

一种解决方案是将其视为前端解决方案。可以说,前端在任何时候都应该只吃尽可能多的东西。

我假设它是外部资源(图像等)而不是幻灯片标记本身,它构成了这 5MB 的大部分,在这种情况下,DOM 不应尝试调用这些资源,除非它们是必要的。

我建议将整个幻灯片文档提供给 ajax 调用,但只在调用时将标记引入每张幻灯片。像这样:

$.ajax('path/to/slides', {
async: false,
complete: function ajaxCallback(slidesDOM){
// Pull out the individual slides from your slideshow HTML
$slides = $(slidesDOM).find('.slide');

// For each of these...
$slides.each(function prepareSlide(){
// Store a reference to the slide's contents
var $slideContent = $($(this).html());
// Empty the contents and keep only the slide element itself
var $slideWrapper = $(this).empty();

$slideWrapper
// Put the slide where you want it
.appendTo('.slidesContainer')
// And attach some kind of event to it
// (depending on how your slideware works, you might want to bind this elsewhere)
.on('focus', function injectContent(){
// Put the content in — NOW external resources will load
$slideWrapper.append($slideContent);

// Unbind this function trigger
$slideWrapper.off('focus', injectContent);
});
})
}
});

关于javascript - 从服务器中的文档中获取 HTML 元素并在客户端中动态显示它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992274/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com