答案 0 :(得分: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库:当脚本变得更复杂时,它会为您节省很多麻烦。