使用PHP+CSS+JS+HTML5+JSON构建TronLink钱包(无MySQL)
使用PHP+CSS+JS+HTML5+JSON构建TronLink钱包(无MySQL)
本文将详细介绍如何使用纯前端技术构建一个简单的TronLink钱包界面,不使用MySQL数据库,所有数据存储在JSON文件中。这个实现适合SEO优化,并且完全原创。
项目概述
我们将创建一个轻量级的TronLink钱包界面,包含以下功能:
-钱包创建/导入
-余额查询
-交易记录查看
-简单的转账功能
目录结构
/tronlink-wallet/
├──index.php主入口文件
├──assets/
│├──css/
││└──style.css样式文件
│├──js/
││└──app.js主JavaScript文件
│└──data/
│└──wallets.json存储钱包数据的JSON文件
├──functions.phpPHP辅助函数
└──api.php处理API请求
1.HTML结构(index.php)
<?php
//简单的SEO优化
$pageTitle="TronLink钱包-安全便捷的TRX钱包解决方案";
$pageDescription="免费的TronLink钱包解决方案,无需安装扩展,直接在浏览器中使用TRON网络";
$pageKeywords="TronLink,TRX钱包,波场钱包,加密货币钱包";
//包含函数文件
require_once'functions.php';
//检查是否有活跃会话
$loggedIn=checkLogin();
?>
<!DOCTYPEhtml>
<htmllang="zh-CN">
<head>
<metacharset="UTF-8">
<metaname="viewport"content="width=device-width,initial-scale=1.0">
<metaname="description"content="<?phpecho$pageDescription;?>">
<metaname="keywords"content="<?phpecho$pageKeywords;?>">
<title><?phpecho$pageTitle;?></title>
<linkrel="stylesheet"href="assets/css/style.css">
<linkrel="icon"href="favicon.ico"type="image/x-icon">
</head>
<body>
<header>
<divclass="container">
<h1>TronLinkWebWallet</h1>
<nav>
<ul>
<li><ahref="home">首页</a></li>
<?phpif($loggedIn):?>
<li><ahref="dashboard">仪表盘</a></li>
<li><ahref="send">转账</a></li>
<li><ahref="transactions">交易记录</a></li>
<li><ahref=""id="logout">退出</a></li>
<?phpelse:?>
<li><ahref="login">登录</a></li>
<li><ahref="create">创建钱包</a></li>
<?phpendif;?>
</ul>
</nav>
</div>
</header>
<mainclass="container">
<?phpif($loggedIn):?>
<!--已登录用户显示仪表盘-->
<sectionid="dashboard">
<h2>钱包概览</h2>
<divclass="wallet-info">
<p>地址:<spanid="wallet-address"></span></p>
<p>余额:<spanid="wallet-balance">0</span>TRX</p>
</div>
<buttonid="refresh-balance">刷新余额</button>
</section>
<sectionid="send">
<h2>发送TRX</h2>
<formid="send-form">
<divclass="form-group">
<labelfor="recipient">接收地址:</label>
<inputtype="text"id="recipient"required>
</div>
<divclass="form-group">
<labelfor="amount">金额(TRX):</label>
<inputtype="number"id="amount"step="0.000001"min="0.000001"required>
</div>
<buttontype="submit">发送</button>
</form>
</section>
<sectionid="transactions">
<h2>交易记录</h2>
<divclass="transactions-list"id="transactions-list">
<!--交易记录将通过JS动态加载-->
</div>
</section>
<?phpelse:?>
<!--未登录用户显示登录/创建表单-->
<sectionid="login"class="auth-section">
<h2>登录钱包</h2>
<formid="login-form">
<divclass="form-group">
<labelfor="private-key">私钥:</label>
<inputtype="password"id="private-key"required>
</div>
<buttontype="submit">登录</button>
</form>
</section>
<sectionid="create"class="auth-section">
<h2>创建新钱包</h2>
<formid="create-form">
<divclass="form-group">
<labelfor="password">设置密码:</label>
<inputtype="password"id="password"required>
</div>
<divclass="form-group">
<labelfor="password-confirm">确认密码:</label>
<inputtype="password"id="password-confirm"required>
</div>
<buttontype="submit">创建钱包</button>
</form>
</section>
<?phpendif;?>
</main>
<footer>
<divclass="container">
<p>©<?phpechodate('Y');?>TronLinkWebWallet.所有权利保留。</p>
<p>这是一个演示项目,不应用于存储大量资金。</p>
</div>
</footer>
<scriptsrc="assets/js/app.js"></script>
</body>
</html>
2.CSS样式(assets/css/style.css)
/基础样式/
:root{
--primary-color:2e5bff;
--secondary-color:8c54ff;
--dark-color:2e384d;
--light-color:f7f9fc;
--success-color:36b37e;
--danger-color:ff5630;
--warning-color:ffab00;
}
{
margin:0;
padding:0;
box-sizing:border-box;
}
body{
font-family:'SegoeUI',Tahoma,Geneva,Verdana,sans-serif;
line-height:1.6;
color:var(--dark-color);
background-color:var(--light-color);
}
.container{
width:90%;
max-width:1200px;
margin:0auto;
padding:20px;
}
/头部样式/
header{
background-color:white;
box-shadow:02px10pxrgba(0,0,0,0.1);
padding:15px0;
position:sticky;
top:0;
z-index:100;
}
headerh1{
color:var(--primary-color);
margin-bottom:10px;
}
navul{
display:flex;
list-style:none;
}
navulli{
margin-right:20px;
}
navullia{
text-decoration:none;
color:var(--dark-color);
font-weight:500;
transition:color0.3s;
}
navullia:hover{
color:var(--primary-color);
}
/主要内容区域/
main{
min-height:80vh;
padding:40px0;
}
section{
margin-bottom:40px;
background:white;
padding:30px;
border-radius:8px;
box-shadow:02px15pxrgba(0,0,0,0.05);
}
h2{
color:var(--primary-color);
margin-bottom:20px;
font-size:1.8rem;
}
/表单样式/
.form-group{
margin-bottom:20px;
}
label{
display:block;
margin-bottom:8px;
font-weight:500;
}
input[type="text"],
input[type="password"],
input[type="number"]{
width:100%;
padding:12px;
border:1pxsolidddd;
border-radius:4px;
font-size:16px;
transition:border0.3s;
}
input[type="text"]:focus,
input[type="password"]:focus,
input[type="number"]:focus{
border-color:var(--primary-color);
outline:none;
}
button{
background-color:var(--primary-color);
color:white;
border:none;
padding:12px20px;
border-radius:4px;
cursor:pointer;
font-size:16px;
font-weight:500;
transition:background-color0.3s;
}
button:hover{
background-color:1a4bff;
}
/钱包信息样式/
.wallet-info{
background:f8f9ff;
padding:20px;
border-radius:8px;
margin-bottom:20px;
}
.wallet-infop{
margin-bottom:10px;
font-size:16px;
}
/交易记录样式/
.transactions-list{
border:1pxsolideee;
border-radius:8px;
overflow:hidden;
}
.transaction-item{
padding:15px;
border-bottom:1pxsolideee;
display:flex;
justify-content:space-between;
align-items:center;
}
.transaction-item:last-child{
border-bottom:none;
}
.transaction-amount{
font-weight:bold;
}
.transaction-amount.incoming{
color:var(--success-color);
}
.transaction-amount.outgoing{
color:var(--danger-color);
}
/响应式设计/
@media(max-width:768px){
navul{
flex-direction:column;
}
navulli{
margin-right:0;
margin-bottom:10px;
}
.container{
width:95%;
}
}
/通知样式/
.notification{
position:fixed;
top:20px;
right:20px;
padding:15px25px;
border-radius:4px;
color:white;
z-index:1000;
animation:slideIn0.3sease-out;
}
.notification.success{
background-color:var(--success-color);
}
.notification.error{
background-color:var(--danger-color);
}
@keyframesslideIn{
from{
transform:translateX(100%);
opacity:0;
}
to{
transform:translateX(0);
opacity:1;
}
}
3.JavaScript功能(assets/js/app.js)
//主应用控制器
document.addEventListener('DOMContentLoaded',function(){
//初始化应用
initApp();
//事件监听器
setupEventListeners();
});
functioninitApp(){
//检查URL哈希以显示正确的部分
consthash=window.location.hash;
if(hash){
showSection(hash.substring(1));
}else{
showSection('home');
}
//如果已登录,加载钱包数据
if(document.getElementById('dashboard')){
loadWalletData();
}
}
functionsetupEventListeners(){
//导航链接
document.querySelectorAll('nava').forEach(link=>{
link.addEventListener('click',function(e){
if(this.getAttribute('href').startsWith('')){
e.preventDefault();
constsectionId=this.getAttribute('href').substring(1);
showSection(sectionId);
window.location.hash=sectionId;
}
});
});
//登录表单
if(document.getElementById('login-form')){
document.getElementById('login-form').addEventListener('submit',handleLogin);
}
//创建钱包表单
if(document.getElementById('create-form')){
document.getElementById('create-form').addEventListener('submit',handleCreateWallet);
}
//发送交易表单
if(document.getElementById('send-form')){
document.getElementById('send-form').addEventListener('submit',handleSendTransaction);
}
//刷新余额按钮
if(document.getElementById('refresh-balance')){
document.getElementById('refresh-balance').addEventListener('click',refreshBalance);
}
//退出按钮
if(document.getElementById('logout')){
document.getElementById('logout').addEventListener('click',handleLogout);
}
}
functionshowSection(sectionId){
//隐藏所有部分
document.querySelectorAll('main>section').forEach(section=>{
section.style.display='none';
});
//显示请求的部分
constsection=document.getElementById(sectionId);
if(section){
section.style.display='block';
}
}
asyncfunctionloadWalletData(){
try{
//从API获取钱包数据
constresponse=awaitfetch('api.php?action=get_wallet');
constdata=awaitresponse.json();
if(data.success){
//更新UI
document.getElementById('wallet-address').textContent=data.wallet.address;
document.getElementById('wallet-balance').textContent=data.balance;
//加载交易记录
loadTransactions(data.wallet.address);
}else{
showNotification('无法加载钱包数据:'+data.message,'error');
}
}catch(error){
showNotification('网络错误:'+error.message,'error');
}
}
asyncfunctionloadTransactions(address){
try{
//从API获取交易记录
constresponse=awaitfetch(`api.php?action=get_transactions&address=${address}`);
constdata=awaitresponse.json();
if(data.success){
renderTransactions(data.transactions);
}else{
showNotification('无法加载交易记录:'+data.message,'error');
}
}catch(error){
showNotification('网络错误:'+error.message,'error');
}
}
functionrenderTransactions(transactions){
constcontainer=document.getElementById('transactions-list');
container.innerHTML='';
if(transactions.length===0){
container.innerHTML='<p>暂无交易记录</p>';
return;
}
transactions.forEach(tx=>{
constisIncoming=tx.to===document.getElementById('wallet-address').textContent;
consttransactionEl=document.createElement('div');
transactionEl.className='transaction-item';
transactionEl.innerHTML=`
<div>
<p>${isIncoming?'来自':'发送至'}:${isIncoming?tx.from:tx.to}</p>
<small>${newDate(tx.timestamp1000).toLocaleString()}</small>
</div>
<divclass="transaction-amount${isIncoming?'incoming':'outgoing'}">
${isIncoming?'+':'-'}${tx.amount}TRX
</div>
`;
container.appendChild(transactionEl);
});
}
asyncfunctionhandleLogin(e){
e.preventDefault();
constprivateKey=document.getElementById('private-key').value.trim();
if(!privateKey){
showNotification('请输入私钥','error');
return;
}
try{
constresponse=awaitfetch('api.php',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`action=login&private_key=${encodeURIComponent(privateKey)}`
});
constdata=awaitresponse.json();
if(data.success){
showNotification('登录成功','success');
setTimeout(()=>{
window.location.reload();
},1500);
}else{
showNotification('登录失败:'+data.message,'error');
}
}catch(error){
showNotification('网络错误:'+error.message,'error');
}
}
asyncfunctionhandleCreateWallet(e){
e.preventDefault();
constpassword=document.getElementById('password').value;
constpasswordConfirm=document.getElementById('password-confirm').value;
if(password!==passwordConfirm){
showNotification('两次输入的密码不匹配','error');
return;
}
if(password.length<8){
showNotification('密码长度至少为8个字符','error');
return;
}
try{
constresponse=awaitfetch('api.php',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`action=create_wallet&password=${encodeURIComponent(password)}`
});
constdata=awaitresponse.json();
if(data.success){
showNotification('钱包创建成功!请妥善保存您的私钥','success');
//显示私钥给用户(实际应用中应该更安全地处理)
alert(`您的私钥是:${data.privateKey}\n\n请妥善保存,丢失后将无法恢复钱包!`);
setTimeout(()=>{
window.location.hash='login';
window.location.reload();
},2000);
}else{
showNotification('创建钱包失败:'+data.message,'error');
}
}catch(error){
showNotification('网络错误:'+error.message,'error');
}
}
asyncfunctionhandleSendTransaction(e){
e.preventDefault();
constrecipient=document.getElementById('recipient').value.trim();
constamount=parseFloat(document.getElementById('amount').value);
if(!recipient||isNaN(amount){
showNotification('请输入有效的接收地址和金额','error');
return;
}
try{
constresponse=awaitfetch('api.php',{
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
},
body:`action=send_transaction&recipient=${encodeURIComponent(recipient)}&amount=${amount}`
});
constdata=awaitresponse.json();
if(data.success){
showNotification('交易发送成功!','success');
document.getElementById('send-form').reset();
//刷新余额和交易记录
refreshBalance();
}else{
showNotification('交易失败:'+data.message,'error');
转载请注明出处: TronLink官网下载-TRON-TRX-波场-波比-波币-波宝|官网-钱包-苹果APP|安卓-APP-下载
本文的链接地址: https://tianjinfa.org/post/3049
扫描二维码,在手机上阅读
文章作者:
文章标题:使用PHP+CSS+JS+HTML5+JSON构建TronLink钱包(无MySQL)
文章链接:https://tianjinfa.org/post/3049
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
文章标题:使用PHP+CSS+JS+HTML5+JSON构建TronLink钱包(无MySQL)
文章链接:https://tianjinfa.org/post/3049
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 !
打赏
如果觉得文章对您有用,请随意打赏。
您的支持是我们继续创作的动力!
微信扫一扫
支付宝扫一扫
您可能对以下文章感兴趣
-
TronLink钱包集成开发指南:PHP+CSS+JS+HTML5实现
8小时前
-
你好!😊你想聊些什么呢?有什么我可以帮你的吗?
10小时前
-
TronLink钱包集成开发指南-原创PHP实现
8小时前
-
TronLink钱包HTML5实现教程-原创代码与SEO优化指南
8小时前
-
TronLink钱包集成指南:使用JavaScript连接TRON区块链
9小时前
-
使用JavaScript开发TronLink钱包集成指南
11小时前
-
使用PHP+CSS+JS+HTML5+JSON创建TronLink风格钱包(无MySQL)
6小时前
-
你好!😊有什么我可以帮助你的吗?无论是问题解答、学习建议,还是闲聊放松,我都在这儿呢!✨
7小时前
-
TronLink钱包网页版实现(无MySQL版)
7小时前
-
TronLink钱包HTML5实现教程
8小时前