我在Javascript中使用pubnub(版本3.10.2,我相信它是截至目前的最新版本)。我正在制作一个小游戏,并且游戏旁边是一个聊天div,我在其中添加了一个包含我的消息的li到ul。我也有一个入住柜台。我在pubnub.subscribe(presence:displayOccupancy)中调用一个函数来显示m.occupancy。 (对不起,如果所有这些都是无用的信息,第一个问题)问题是有一个UUID,我命名为“test3”,它不会从频道“聊天”超时,当我按下一个按钮强制UUID取消订阅时,它几秒钟后会自动重新加入。在更改UUID并再次尝试之后,它们会根据我的心跳正常超时,如果我取消订阅UUID,它将生成一个离开事件,就是这样。为什么UUID不会离开频道或超时?
编辑:不仅是“test3”UUID徘徊不前。每次我从Dreamweaver重新打开并测试我的代码时,我之前已经分配过的最新测试UUID“替换”之前的UUID。 (“以前”,如前一天,而不是之前的所有测试)
// JavaScript Document
var uuid = PUBNUB.uuid();
var pubnub = PUBNUB.init({
publish_key: 'pub-c-bbf633c9-8ddb-43f7-bf4c-c03215ccd8d8',
subscribe_key: 'sub-c-a1b830fa-d9f5-11e5-a22c-02ee2ddab7fe',
uuid: uuid,
heartbeat: 10
});
var noOfWordsInRow = 0;
//arrays
var consanantArray = ["b","c","d","f","g","h","j","k","l","m","n","p","r","s","t","v","w","y"];
var vowelArray = ["a","e","i","o","u"];
var submittedWordsArray = [];
//containers
var lettersDiv = $("div#letterDisplay");
var wordAreaDiv = $("div#wordArea");
var submitDiv = $("div#submitDiv");
var startDiv = $("div#start");
var checkDiv = $("div#checkDiv");
var consanantUl = $("ul#consanantUl");
var vowelUl = $("ul#vowelUl");
var chatUl = $("#chatList");
var confirmWord = $("p#word");
var confirmBtn = $("#confirmBtn");
var error = $("#error");
var noOfPlayers = $("p#noOfPlayers");
//buttons
var startGame = $("button#enterGame");
//input
var chatInput = $("#chatInput");
//other
/**
var consanantOne = $("#firstConsanant");
var consanantTwo = $("#secConsanant");
var consanantThree = $("#thirdConsanant");
var consanantFour = $("#fourthConsanant");
var vowelOne = $("#firstVowel");
var vowelTwo = $("#firstVowel");
var vowelThree = $("#firstVowel");
**/
//pubnub portion of game
$("#testLeave").click(function(){
"use strict";
pubnub.unsubscribe({
channel: "chat"
});
});
//game and chat stuff below
$(window).load(function(){
"use strict";
generateLetters();
});
startGame.click(function(){
"use strict";
//channel
startDiv.css("display", "none");
});
function handleMessage(message){
"use strict";
chatUl.append("<li>"+message+"</li>");
}
function getNoOfUsers(m){
"use strict";
console.log(m);
if(m.action === "join"){
}
else if(m.action === "timeout" || m.action === "leave"){
pub("chat","Player left");
}
noOfPlayers.html(m.occupancy);
}
function playerJoined(){
"use strict";
pub("chat","Player joined");
}
function pub(channel, message){
"use strict";
pubnub.publish({
channel: channel,
message: message
});
}
chatInput.keydown(function(key){
"use strict";
if(key.which === 13){
pub("chat",$("#chatInput").val());
chatInput.val('');
}
});
function generateLetters(){
"use strict";
//vowels
generateRandomLetters(vowelArray, vowelUl, 3);
//consanants
generateRandomLetters(consanantArray, consanantUl, 4);
}
function generateRandomLetters(array, ul, noOfElementsNeeded){ //noOfElementsNeeded = 3 or 4
"use strict";
var usedLetters = [];
var successCount = 0;
while(successCount < noOfElementsNeeded){
var letter = array[Math.floor(Math.random()*array.length)];
var successful = usedLetters.indexOf(letter) === -1; //boolean, checks if the generated letter has been generated before
if(successful){
ul.append("<li><button>"+letter+"</button></li>");
usedLetters.push(letter);
successCount++;
}
}
}
function duplicateLetter(letter){
"use strict";
if((confirmWord.text()).indexOf(letter) > -1){
return true;
}
else {
return false;
}
}
function wordLengthAboveTwo(){
"use strict";
if((confirmWord.text()).length < 3){
return false;
} else {
return true;
}
}
function repeatWords(){
"use strict";
if(submittedWordsArray.indexOf(confirmWord.text()) === -1){
return false;
} else {
return true;
}
}
$(document).on('click', 'ul li button', function(){
"use strict";
var letter = $(this).text();
if(duplicateLetter(letter)){
error.text("You cannot use the same letter twice in a word.");
}
else {
confirmWord.append(letter);
}
});
confirmBtn.click(function(){
"use strict";
if(wordLengthAboveTwo()){
if(!repeatWords()){
if(noOfWordsInRow === 5){
$("#tableOfSubmittedWords").append("<tr><td><p>"+confirmWord.text()+"</p></td></tr>");
noOfWordsInRow++;
noOfWordsInRow = 1;
} else {
$("#tableOfSubmittedWords tr:last").append("<td><p>"+confirmWord.text()+"</p></td>");
noOfWordsInRow++;
}
submittedWordsArray.push(confirmWord.text());
confirmWord.text('');
error.text('');
} else {
error.text("You cannot submit two of the same word.");
}
} else {
error.text("Your word has to be above two letters in length.");
}
});
$(document).on('click', 'p#word', function(){
"use strict";
confirmWord.text('');
});
pubnub.subscribe({
channel: "chat",
presence: getNoOfUsers,
message: handleMessage,
connect: playerJoined
});
@charset "utf-8";
/* CSS Document */
#container {
height: 800px;
position:fixed;
}
div#start {
z-index: 18;
height: 850px;
position: absolute;
background-color: #00FF8C;
width: 100%;
}
#letterDisplay {
position: relative;
background-color: #01ACFF;
height: 200px; /*200px*/
margin: 0 auto;
}
#wordArea {
overflow: scroll;
height: 400px;
width: 100%;
text-align: center;
}
#submitDiv {
background-color: #01ACFF;
height: 250px;
margin: 0 auto;
}
#chatDiv {
position: fixed;
height: 200px;
z-index: 2;
}
ul#chatList li, ul#listOfUsers li{
display: list-item !important;
text-align: left;
}
table {
width: 100%;
height: 100%;
table-layout: fixed;
}
table tr {
width: 100%;
}
table tr td {
size: auto;
}
table tr td p{
font: 25px/1 "Comic Sans MS", Verdana, sans-serif;
text-transform: uppercase;
}
#confirmBtn {
height: 75px;
width: 200px;
}
#checkDiv {
padding-top: 25px;
text-align: center;
size: auto;
}
p#word {
font: 30px/1 "Comic Sans MS", Verdana, sans-serif;
text-transform: uppercase;
}
p#word:hover {
color: #E74C3C;
cursor: pointer;
}
p#error {
color: #E74C3C;
transition: all 0.1s;
-moz-transition: all 0.1s;
-webkit-transition: all 0.1s;
}
div ul li p {
font: 25px/1 "Comic Sans MS", Verdana, sans-serif;
text-transform: uppercase;
}
button {
font: 36px/1 "Comic Sans MS", Verdana, sans-serif;
color: #FFF;
width: 75px;
height: 75px;
text-transform: uppercase;
border-radius: 4px;
background-color: #F2CF66;
text-shadow: 0px -2px #2980B9;
transition: all 0.1s;
-moz-transition: all 0.1s;
-webkit-transition: all 0.1s;
}
button#enterGame {
width: auto;
}
button:hover {
background-color: #E74C3C;
cursor: pointer;
}
button:active {
-webkit-transform: translate(0px,5px);
-moz-transform: translate(0px,5px);
transform: translate(0px,5px);
border-bottom: 1px solid;
}
ul {
list-style-type: none;
text-align: center;
}
ul#consanantUl {
padding-top: 25px;
}
ul#vowelUl {
vertical-align: bottom;
}
ul li{
display: inline;
padding-right: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Word Game</title>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div id="container">
<button id="testLeave">clik 2 leev</button>
<div id="start">
Channel Name? <input type="text" id="channelInput">
<button id="enterGame">Join</button>
<p id="startMenuError"></p>
</div>
<div id="presenceDiv">
<p id="noOfPlayers"></p>
</div>
<div id="chatDiv">
<ul id="chatList"></ul>
<input type="text" id="chatInput">
</div>
<div id="letterDisplay">
<ul id="consanantUl"></ul>
<ul id="vowelUl"></ul>
</div>
<div id="wordArea">
<table id="tableOfSubmittedWords">
<tr><td> </td><td> </td><td> </td><td> </td><td> </td></tr>
<tr></tr>
</table>
</div>
<div id="submitDiv">
<div id="checkDiv">
<p id="word"></p>
<button id="confirmBtn">submit</button>
<p id="error"></p>
</div>
</div>
</div>
<!--Jquery-->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.color-animation/1/mainfile"></script>
<!--Pubnub-->
<script src="https://cdn.pubnub.com/pubnub-3.10.2.js"></script>
<!--My Code-->
<script src="script.js"></script>
</body>
</html>