2016-12-30 9 views
0

Hello wonderful people,Обновить изображение после Src Изменение атрибута

Я пытаюсь обновить изображение после изменения атрибута 'src'. Я попытался добавить URL-адрес с отметкой даты, но это, похоже, не работает. Может ли кто-нибудь показать мне, где я ошибаюсь, или просто предложить лучший способ сделать все это вместе?

Я включил весь свой код на сегодняшний день, так как я не уверен, где проблема. Я немного боюсь, я боюсь. Первые три строки в функции displayOut наиболее вероятно, где проблема. Спасибо заранее за вашу помощь.

var db = [{ // ROOMS 
 
    rooms: [{ // Room 0 - North room 
 
     description: "You awake to find yourself in a dank smelling old room, plaster and smashed glass litters the floor. To the North is a broken window, beyond which you can only see a thick grey mist. There is one door by which to exit, to the South.", 
 
     roomImg: "images/room_0.jpg", 
 
     exits: { 
 
     north: false, 
 
     south: 1, 
 
     east: false, 
 
     west: false, 
 
     up: false, 
 
     down: false 
 
     }, 
 
     roomInvent: ["a Box of Matches", "a Glass Shard"] 
 
    }, { // Room 1 - Corridor 
 
     description: "You are in a short, dark corridor, a single tungsten bulb hangs stiffly from the ceiling. There is a light switch on the wall.", 
 
     roomImg: "images/room_1.jpg", 
 
     exits: { 
 
     north: 0, 
 
     south: 4, 
 
     east: 3, 
 
     west: false, 
 
     up: 5, 
 
     down: false 
 
     }, 
 
     roomInvent: [] 
 
    }, { // Room 2 - West Room - Locked room 
 
     description: "", 
 
     roomImg: "images/room_2.jpg", 
 
     exits: { 
 
     north: false, 
 
     south: false, 
 
     east: false, 
 
     west: false, 
 
     up: false, 
 
     down: false 
 
     }, 
 
     roomInvent: [] 
 
    }, { // Room 3 - East room - Bedroom 
 
     description: "You are in the Bedroom", 
 
     roomImg: "images/room_3.jpg", 
 
     exits: { 
 
     north: false, 
 
     south: false, 
 
     east: false, 
 
     west: 1, 
 
     up: false, 
 
     down: false 
 
     }, 
 
     roomInvent: [] 
 
    }, { // Room 4 - South room - kitchen 
 
     description: "You are in a small kitchen. There is an old log fire on the East wall, and a door leading outside to the South.", 
 
     roomImg: "images/room_4.jpg", 
 
     exits: { 
 
     north: 1, 
 
     south: false, 
 
     east: false, 
 
     west: false, 
 
     up: false, 
 
     down: false 
 
     }, 
 
     roomInvent: [] 
 
    }, { // Room 5 - Attic 
 
     description: "You are in the Attic.", 
 
     roomImg: "images/room_5.jpg", 
 
     exits: { 
 
     north: false, 
 
     south: false, 
 
     east: false, 
 
     west: false, 
 
     up: false, 
 
     down: 1 
 
     }, 
 
     roomInvent: [] 
 
    }] 
 
    }, // End Rooms 
 
    { // ITEMS 
 
    items: [{ 
 
     itemIndex: 0, 
 
     name: "a Box of Matches", 
 
     useWith: null, 
 
     examine: "There is only a single match inside." 
 
    }, { 
 
     itemIndex: 1, 
 
     name: "a Glass Shard", 
 
     useWith: null, 
 
     examine: "It looks sharp" 
 
    }, { 
 
     itemIndex: 2, 
 
     name: "a Mallet", 
 
     useWith: null, 
 
     examine: "It is old and rusty, but otherwise uninteresting." 
 
    }] 
 
    } 
 

 
]; //End db 
 

 
var inventory = []; 
 
var inputTextBox = document.getElementById("inputTextBox"); 
 
var diologueBox = document.getElementById("diologueBox"); 
 
var strOut = ""; 
 
var roomLoc = 0; 
 

 

 

 
function displayOut() { 
 
    // images 
 
    let dt = new Date; 
 
    document.getElementById("imgBox").setAttribute("src", db[0].rooms[roomLoc].roomImg + "?dt=" + dt.getTime()); 
 
    // Diologue box 
 
    diologueBox.innerHTML = db[0].rooms[roomLoc].description + 
 
    (function() { // Check if room has items in inventory, if so, list them. 
 
     if (db[0].rooms[roomLoc].roomInvent != "") { 
 
     return "<br><br> The room contains " + 
 
      (function() { 
 
      let items = ""; 
 
      for (let i = 0; i < db[0].rooms[roomLoc].roomInvent.length; i++) { 
 
       items += db[0].rooms[roomLoc].roomInvent[i] + ", "; 
 
      }; 
 
      items = items.slice(0, items.length - 2); 
 
      return items; 
 
      })(); 
 
     } else { 
 
     return "<br><br> The room is empty "; 
 
     }; 
 
    })(); 
 
}; 
 
// Function for changing room location 
 
function navigateTo(direction) { 
 
    if (db[0].rooms[roomLoc].exits[direction] === false) { 
 
    outputBox.innerHTML = "You cannot go " + direction + " from here." 
 
    } else { 
 
    roomLoc = db[0].rooms[roomLoc].exits[direction]; 
 
    displayOut(); 
 
    } 
 
} 
 

 
inputTextBox.addEventListener("keypress", function(event) { 
 
    let x = event.which || event.keyCode; 
 
    if (x === 13) { // 13 is the Return key 
 
    switch (inputTextBox.value.toLowerCase()) { 
 
     //Diologue Navigation 
 
     case "": 
 
     // Nothing happens 
 
     break; 
 
     case "north": 
 
     case "n": 
 
     navigateTo("north"); 
 
     break; 
 
     case "south": 
 
     case "s": 
 
     navigateTo("south"); 
 
     break; 
 
     case "east": 
 
     case "e": 
 
     navigateTo("east"); 
 
     break; 
 
     case "west": 
 
     case "w": 
 
     navigateTo("west"); 
 
     break; 
 
     case "up": 
 
     case "u": 
 
     navigateTo("up"); 
 
     break; 
 
     case "down": 
 
     case "d": 
 
     navigateTo("down"); 
 
     break; 
 
     //Dioogue Help 
 
     case "help": 
 
     outputBox.innerHTML = " Here is a list of useful commands: North, South, East, West, Up, Down, Look, Examine, Inventory, Take, Use"; 
 
     break; 
 
     // 
 
     default: 
 
     outputBox.innerHTML = " I have no idea what " + "'" + inputTextBox.value.bold() + "'" + " means..."; 
 
    } // End switch 
 

 
    //Clear InputTextBox 
 
    inputTextBox.value = ""; 
 
    inputTextBox.setAttribute("placeholder", ""); 
 

 

 
    } // End KeyPress 
 
}); // End Event listener 
 

 
displayOut();
@charset "utf-8"; 
 
@font-face { 
 
    font-family: 'Terminal'; 
 
    /*a name to be used later*/ 
 
    src: url(lcd_solid.ttf); 
 
    /*URL to font*/ 
 
} 
 
* { 
 
    font-family: Terminal; 
 
    font-size: 18px; 
 
    margin: 0; 
 
    border: 0; 
 
} 
 
body, 
 
html { 
 
    font-family: helvetica; 
 
    font-size: 12px; 
 
    background: #282828; 
 
} 
 
#imgBox { 
 
    margin: 0px auto 0px auto; 
 
    background-image: url("../images/room_0.jpg"); 
 
    background-repeat: no-repeat; 
 
    height: 600px; 
 
    width: 1024px; 
 
} 
 
#conBox { 
 
    margin: 0px auto 0px auto; 
 
    position: relative; 
 
    width: 1024px; 
 
    height: 300px; 
 
} 
 
#diologueBox { 
 
    background: #CCC; 
 
    height: 200px; 
 
    clear: both; 
 
    padding: 1px 0px 1px 3px; 
 
    overflow: none; 
 
    position: relative; 
 
} 
 
#diologueBox p { 
 
    margin: 5px; 
 
    left: 0px; 
 
    bottom: 0px; 
 
} 
 
#outputBox { 
 
    background: #CCC; 
 
    height: 50px; 
 
    clear: both; 
 
    padding: 1px 0px 1px 3px; 
 
    overflow: none; 
 
    position: relative; 
 
} 
 
#inputBox { 
 
    position: relative; 
 
    height: 20px; 
 
    background: #C1C1C1; 
 
} 
 
#inputTextBox { 
 
    height: 18px; 
 
    padding: 1px; 
 
    float: right; 
 
    width: 1004px; 
 
    background: #C1C1C1; 
 
} 
 
::-webkit-input-placeholder { 
 
    color: red; 
 
} 
 
:-moz-placeholder { 
 
    /* Firefox 18- */ 
 
    color: red; 
 
} 
 
::-moz-placeholder { 
 
    /* Firefox 19+ */ 
 
    color: red; 
 
} 
 
:-ms-input-placeholder { 
 
    color: red; 
 
} 
 
#inputTextBox.focus, 
 
input:focus { 
 
    outline: none; 
 
} 
 
#bullet { 
 
    width: 15px; 
 
    float: left; 
 
    padding: 4px 0px 1px 3px; 
 
}
<!DOCTYPE html> 
 
<html lang="en"> 
 

 
<head> 
 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
 
    <link rel="stylesheet" type="text/css" href="styles/style.css"> 
 
    <meta charset="utf-8"> 
 
    <title>Untitled</title> 
 
</head> 
 

 
<body> 
 
    <div id="imgBox"></div> 
 
    <div id="conBox"> 
 
    <div id="diologueBox"></div> 
 
    <div id="outputBox"></div> 
 
    <div id="inputBox"> 
 
     <div id="bullet">></div> 
 
     <input id="inputTextBox" type="text" maxlength="60" placeholder="Type commands here, type 'Help' at any time for list of commands" autofocus></input> 
 
    </div> 
 
    </div> 
 

 
    <script src="script2.js"></script> 
 

 
</body> 
 

 
</html>

+0

Я только начинаю использовать как «пусть» и «Const», это просто способ обеспечения правильного объем. Я знаю, что это не обязательно, где я это сказал, но это хорошая практика для будущего моего развития, я думаю. – Cuckoo

ответ

1

Быстрое решение: использовать фоновое изображение, как вы сделали в вашем CSS.

Редактировать: однако изменение атрибута src должно работать, я не уверен, как обработать его jquery.

При использовании фона не вариант, вы можете:

  • все ваши <img> в вашем HTML и скрыть/показать их (быстро, но это необходимо загрузить все авансовые)
  • создать IMG элементы на лету с $("<img/>") и заменить старый. Учитывая ваш прецедент, это довольно дешево.
  • использовать холст для рисования изображений (но тогда почему бы не использовать фоновое изображение?)
+0

Спасибо! Я знал, что передумал, я пошел с опцией «background-img», и это работает. Спасибо! :) – Cuckoo

+0

Canvas и можно щелкнуть правой кнопкой мыши, фон-изображения не так много – Noino

 Смежные вопросы

  • Нет связанных вопросов^_^