首页/ mobileweb/ 小草旅游攻略/ 代码预览

💻 代码预览 · 小草旅游攻略

mw_travel · 上传者 小草网络
← 返回详情
xiaocao-travel/app.js · 约 5570 字符
1// 小草旅游攻略 · 交互逻辑
2let currentId = parseInt(location.search.match(/id=(\d+)/)?.[1] || '1');
3
4function destCard(d){
5  return `<div class="dest-card" onclick="location.href='detail.html?id=${d.id}'">
6    <div class="dc-img"><span class="dc-tag badge ${d.hot?'badge-hot':d.new?'badge-new':'badge-rec'}">${d.hot?'🔥热门':d.new?'🆕新上':'⭐推荐'}</span>${d.emoji}</div>
7    <div class="dc-body">
8      <div class="dc-title">${d.name}</div>
9      <div class="dc-desc">${d.desc}</div>
10      <div class="dc-meta"><span class="dc-score">⭐ ${d.score}</span><span class="dc-price">人均¥${d.price}</span></div>
11    </div>
12  </div>`;
13}
14
15// 首页
16function renderIndex(){
17  document.getElementById('dest-list').innerHTML=DESTINATIONS.filter(d=>d.hot).slice(0,3).map(destCard).join('');
18  document.getElementById('post-list').innerHTML=POSTS.slice(0,2).map(postCard).join('');
19}
20function postCard(p){
21  return `<div class="post-item">
22    <div class="pi-head">
23      <div class="pi-avatar">${p.avatar}</div>
24      <div><div class="pi-user">${p.user}</div><div class="pi-time">${p.time}</div></div>
25      <div style="margin-left:auto;color:#ccc">⋯</div>
26    </div>
27    <div class="pi-title">${p.title}</div>
28    <div class="pi-text">${p.text}</div>
29    <div class="pi-img">${p.img}</div>
30    <div class="pi-actions">
31      <span class="${p.liked?'liked':''}" onclick="toggleLike(this)">${p.liked?'❤️':'🤍'} ${p.likes}</span>
32      <span>💬 ${p.comments}</span>
33      <span>📤 分享</span>
34    </div>
35  </div>`;
36}
37
38// 目的地列表
39let catFilter='全部';
40function renderDestinations(){
41  let list=DESTINATIONS;
42  if(catFilter==='自然') list=list.filter(d=>d.type==='自然风光');
43  else if(catFilter==='历史') list=list.filter(d=>d.type==='历史文化');
44  else if(catFilter==='海滨') list=list.filter(d=>d.type==='海滨度假');
45  else if(catFilter==='古城') list=list.filter(d=>d.type==='古城古镇');
46  document.getElementById('dest-list').innerHTML=list.map(destCard).join('');
47}
48function setCat(el,c){ catFilter=c;
49  document.querySelectorAll('.filter-bar a').forEach(a=>{a.style.color='#666';a.style.borderBottom='none';a.style.fontWeight='400'});
50  el.style.color='var(--primary)';el.style.borderBottom='2px solid var(--primary)';el.style.fontWeight='600';
51  renderDestinations();
52}
53
54// 目的地详情
55function renderDetail(){
56  const d=DESTINATIONS.find(x=>x.id===currentId);
57  if(!d) return;
58  currentId=d.id;
59  document.getElementById('detail-body').innerHTML=`
60    <div class="detail-img" style="height:170px;background:linear-gradient(135deg,${d.color},#fff);display:flex;align-items:center;justify-content:center;font-size:70px">${d.emoji}</div>
61    <div class="detail-card" style="background:#fff;border-radius:12px;margin:12px;padding:16px">
62      <div style="display:flex;justify-content:space-between;align-items:center">
63        <div><div style="font-size:18px;font-weight:700">${d.name}</div><div style="font-size:12px;color:#999;margin-top:2px">${d.city} · ${d.type}</div></div>
64        <div style="text-align:right"><div style="font-size:22px;color:var(--accent);font-weight:700">⭐${d.score}</div><div style="font-size:11px;color:#999">人均¥${d.price}</div></div>
65      </div>
66      <div style="font-size:13px;color:#666;margin-top:10px">${d.desc}</div>
67      <div style="margin-top:8px">${d.tags.map(t=>`<span class="tag">#${t}</span>`).join('')}</div>
68    </div>
69    <div class="section-title">🗺️ 一日游路线</div>
70    <div class="card" style="padding-top:4px">
71      ${d.spots.map(s=>`<div class="spot-item"><div class="si-no">${s.t==='上午'?'1':s.t==='中午'?'2':s.t==='下午'?'3':'4'}</div><div class="si-info"><div class="si-name">${s.n}</div><div class="si-desc">${s.d}</div></div><span style="font-size:12px;color:var(--primary);font-weight:600">${s.t}</span></div>`).join('')}
72    </div>
73    <div class="section-title">🍜 必吃美食</div>
74    <div class="card" style="padding-top:4px">
75      ${d.foods.map(f=>`<div class="food-item"><div class="fi-icon">${f.e}</div><div class="fi-info"><div class="fi-name">${f.n}</div></div><span class="fi-price">${f.p}</span></div>`).join('')}
76    </div>`;
77}
78
79// 行程规划
80function renderPlan(){
81  document.getElementById('plan-list').innerHTML=ITINERARY.map(day=>`
82    <div class="plan-day">
83      <div class="pd-head"><span class="pd-day">${day.day}</span><span class="pd-date">${day.date}</span></div>
84      ${day.items.map(it=>`<div class="pd-item"><span class="pd-time">${it.t}</span><span class="pd-icon">${it.i}</span><span class="pd-name">${it.n}</span></div>`).join('')}
85    </div>`).join('');
86}
87
88// 游记
89function renderTravelogue(){
90  document.getElementById('post-list').innerHTML=POSTS.map(postCard).join('');
91}
92function toggleLike(el){
93  const span=el;
94  const liked=span.classList.toggle('liked');
95  const m=span.textContent.match(/(\d+)/);
96  if(m) span.textContent=(liked?'❤️ ':'🤍 ')+(parseInt(m[1])+(liked?1:-1));
97}
98function publishPost(){ alert('📝 发布游记\n\n记录你的旅行故事,分享给更多旅友!(演示页)'); }
99
100// 我的
101function renderMine(){
102  document.getElementById('p-name').textContent=USER.name;
103  document.getElementById('p-level').textContent=USER.level;
104  document.getElementById('p-trips').textContent=USER.trips;
105  document.getElementById('p-spots').textContent=USER.spots;
106  document.getElementById('p-likes').textContent=USER.likes.toLocaleString();
107}
108