0

编辑:由于版权,问题的主体已被隐藏。

4

1 回答 1

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">&diams;%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 库:当您的脚本变得更复杂时,它可以为您节省很多麻烦。

于 2013-04-21T06:56:33.160 回答