【问题标题】:Using Vanilla JS to update page content dynamically使用 Vanilla JS 动态更新页面内容
【发布时间】:2017-02-01 22:26:58
【问题描述】:

大家好

所以我正在做一个项目,该项目本质上是一个老式的纸笔 rpg,它在聊天室中运行。虽然我碰壁了,因为每个角色的技能和统计都是基于他们的属性,并且在建立初始值的同时,我需要找到一种方法来使统计和技能在他们调整这些属性时动态更新。我知道这对 Angular 来说可能是小菜一碟,但我认为移动部件越少,它失败的可能性就越小。

本质上,目标是设置 JS,以便在更新属性时更新技能和统计数据。以下是属性的代码:

 <td colspan="2">MEMORY</td>
    <td colspan="2">     
    <button onclick="decMem();" class="modButton" type="button">-</button>   
    <input type="text" id="MEM" class="trait" readonly /><script>document.getElementById("MEM").setAttribute('value', Mem);</script>
    <button onclick="incMem();" class="modButton" type="button">+</button>
  </td>

function incMem(){
if (traitPts > 0 && Mem < 20){
traitMod += 1;
Mem += 1;
traitPts -= 1;
document.getElementById("MEM").setAttribute('value', Mem);
document.getElementById("traitPts").setAttribute('value', traitPts);
} else { alert("CAN'T INCREASE FURTHER");}}

function decMem(){
if (traitMod > 0 && Mem > mem){
traitMod -= 1;
Mem -= 1;
traitPts += 1;
document.getElementById("MEM").setAttribute('value', Mem);
document.getElementById("traitPts").setAttribute('value', traitPts);
} else { alert("CAN'T REDUCE FURTHER");}}

然后每个统计数据或技能都由如下变量决定:

//COMBAT STATS
var seq =   Math.floor((Per + Spd) / 2);
var act =   Math.floor(Spd / 2);
var block = Math.floor((Dex + Spd) / 2);
var dodge = Math.floor((Dex + Spd) / 4);

//UNIVERSAL SKILLS
var stealth =   (Per * 3) + Dex;
var climb =     (Dex * 3) + Str;
var negot =     Cha * 4;
var navig =     (Log * 2) + Per + Mem;

并像这样发送到页面:

<td>STEALTH</td>
  <td><input type="text" id="stealth" readonly/><script>document.getElementById("stealth").setAttribute('value', stealth);</script></td>
  <td>CLIMBING</td>
  <td><input type="text" id="climb" readonly /><script>document.getElementById("climb").setAttribute('value', climb);</script></td>

问题是,如果我重新加载页面,所有属性都会随着它的设置而改变,以模拟掷骰子,所以我在这里不知所措。但这是一个 PHP 页面,所以也许有办法临时存储数据?请帮忙!

【问题讨论】:

  • 您了解在浏览器中运行的代码(javascript)和在服务器上运行的代码(php)之间的区别吗?因为您可以使用 php 将这些统计信息存储在服务器中,或者您可以将它们存储在浏览器上的 cookie 中。
  • 使用localstorage
  • 好的,所以我可以设置一个页面让用户修改他们的属性,然后另一个页面给出他们的技能/统计数据的最终输出。有没有办法在同一页面上完成所有这些操作?
  • 我真的更感兴趣的是在一页上敲掉整个角色创建位

标签: javascript php dynamic data-manipulation


【解决方案1】:

您有几个选项可以使用 Javascript 并在刷新期间维护变量。如果您希望在浏览会话结束时清除该信息,您可以使用sessionStorage,但如果您希望它对您的应用程序无限期可用,您可以使用localStorage。有关文档,请参阅 MDN

基本上,在浏览器中“保存”数据的方法是:

localStorage.setItem('myCat', 'Tom');
// or
sessionStorage.setItem('myCat', 'Tom');

然后为了以后取出数据,你将使用

var cat = localStorage.getItem('myCat');

在这种情况下,将返回值'Tom'

【讨论】:

  • 好的,所以我可以设置一个页面让用户修改他们的属性,然后另一个页面给出他们的技能/统计数据的最终输出。有没有办法在同一页面上完成所有这些操作?
  • 我真的更感兴趣的是在一页上敲掉整个角色创建位
  • 如果您可以在两个页面上分别执行此操作,我认为只在一个页面上执行此操作会更容易。你具体要问什么?
  • 我希望所有依赖于属性的统计数据和技能在 incMem();或 decMem();函数被调用
猜你喜欢
  • 2019-06-29
  • 2021-08-22
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-09
  • 2019-06-28
相关资源
最近更新 更多