编辑:由于版权,问题的主体已被隐藏。
1 回答
好的,评论中的讨论提供了问题中应该存在的其他信息。有了这些额外的信息,答案是可能的:
您必须确保消息存在于html标记中,否则您无法通过js直接显示它们。请记住,php 在请求后仅执行一次。如果您只将第一条消息嵌入到 html 标记中,那么其余的就会丢失。因此,要么您必须稍后获取它们,要么您必须将所有消息嵌入到 html 标记中。嵌入所有消息更容易,但您无法访问页面加载后编写的较新消息。
像这样更改 html 脚本的底部以嵌入所有消息,而不仅仅是第一个:
<div class="flash_text">
<input type="hidden" id="mg_msg_key" value="0">
<?php
foreach ($player_msg as $key=>$val)
sprintf('<marquee scrollamount="1" id="mq_msg_%s" class="%s">♦%s</marquee>'."\n",
$key, (0==$key)?'':'mg_msg_hidden', htmlspecialchars($val) );
?>
</div>
请注意,还有一个额外的隐藏输入字段保存当前可见消息的键。此外,除了第一个消息之外的所有消息都有一个额外的 css 类mg_msg_hidden
。您现在可以在 css 级别使用该类来隐藏除第一个消息之外的所有消息,方法是添加到您的 css 规则集:
.mg_msg_hidden{
display: none;
}
这样做只有第一条消息是可见的,其余的都存在(检查 html 标记!)但不可见。这是您现在可以使用 js 控制单个消息的可见性的起点。将您的 js 更改为以下内容:
<script language="javascript">
function showMessage(key){
$('html div.flash_text marquee').addClass('mg_msg_hidden');
$('html div.flash_text marquee#mq_msg_'+key).removeClass('mg_msg_hidden');
}
function nextMessage(){
var key='html div.flash_text input#mg_msg_key';
$(key).val($(key).val()+1);
showMessage($(key).val());
}
function previousMessage(){
var key='html div.flash_text input#mg_msg_key';
$(key).val($(key).val()-1);
showMessage($(key).val());
}
</script>
这显然只是你的一个起点。我没有测试过这些行,而是从头开始编写的。它们可能包含语法错误等。您必须根据需要调整和扩展该方法。
我还使用JQuery表示法以更方便的方式访问元素。您应该考虑在您的项目中使用这样的 js 库:当您的脚本变得更复杂时,它可以为您节省很多麻烦。