Web_Design 板


LINE

将上次的东西做了修改後,实现了我以前想做的"网页模板" 展示网页 https://sites.google.com/view/myjapantravel 原始码很长就不贴了。 上面的网页分为 top 层,以及下方的 left、right 两个区块,使用 的基本 div 规划如下 <head> <div style='position:fixed;top:0;height:100;font-size:40px'> 2014-2019<BR>日本自助旅行 </div> </head> <body bgcolor="#93FF93"> <div> <div style='position:fixed;top:110;float:left;width:260px' valign=top id=left_menu> </div> <div style='position:relative;top:110;left:270;float:left' id=show_zone> </div> </div> head 区,position:fixed 时,固定在 top=0 的位置,整个 div 高度则设为 100。 body 区,第一个子 div float=left 即显示在最左边,第二个子 div float=left 代表显示在第二个左边区。(如果给 right,它会变成对半,我只是要它紧邻) 第一个子 div position 给 fixed 代表我要它不受卷轴滚动影响,固定显示在 left 的 top=110 位置,宽度 260px,也就是左侧选单的宽度。 第二个子 div position 给 relative,初始显示位置为 top=110、left=270 的 位置,也就是右侧内容的初始显示位置。 一般都会用 css 去 config 这些参数,我这是老派作风。 左侧选单的程式码如下: function left_menu() { str="<a onclick='ext_or_not(this,\"table1\")'>+自助行游记</a><BR>"+ "<table id=table1 style='display:none'>"; for(i=0;i<travels.length;i++) str+="<tr><td> <a onclick='show_zone(\""+travels[i]+"\")'>"+ "<u><font color=blue>"+travels[i]+"</font></u></a></td></tr>"; str+="</table><p>"; . . document.getElementById("left_menu").innerHTML=str; } document.getElementById("left_menu").innerHTML=str 即是将产生的左侧 选单字串(str) 透过 innerHTML 方法显示在左侧。 点击每一个左侧选单的母项目(如自助行游记)时,它会呼叫 ext_or_not 函数 function ext_or_not(aa,tid) { v=aa.innerHTML; if(v.indexOf("+")!=-1) v=v.replace(/+/gi,"-"); else v=v.replace(/-/gi,"+"); aa.innerHTML=v; if(document.getElementById(tid).style.display=="none") document.getElementById(tid).style.display="block"; else document.getElementById(tid).style.display="none"; } 把母项目前面的 + 号变 - 号(再按一次则还原),同时将以下原本设定 "display:none" 的子项目(即预设隐藏),变更为 "display:block" 即更 改为显示(再按一次则又变回隐藏)。 点击每一个子项目时,它会呼叫 show_zone 函数,这个函数的内容大部份 与前篇的内容是类似的,也就是以这个内容为基础去扩张後,即得到我真正 想呈现的样貌: function show_zone(pid) { // 一样去读 <pre> ... </pre> 内的内容 content=document.getElementById(pid).innerHTML; // 然後对每一行做解析 tmps=content.split("\n"); for(i=0;i<tmps.length;i++) { tmp=tmps[i]; if(tmp=="") continue; if(tmp.indexOf("http")!=-1) { s=tmp.indexOf("http"); e=s; while(e++<tmp.length) if(tmp.substr(e,1)==" ") break; if(e==s) e=tmp.length-1; url=tmp.substr(s,e-s); tmp=tmp.substr(0,s)+"<a href='"+url+"' target=_blank>"+url+"</a>"; if(url.indexOf("imgur.com")!=-1 || url.substr(-4,1)==".") { if(url.substr(-4,1)!=".") url+=".jpg"; tmp+="<BR><a href='"+url+"' target=_blank>"+ "<img width="+MEDIA_WIDTH+" src='"+url+"'></a><BR>"; } else if(url.indexOf("youtu")!=-1) { urls=url.split("watch?v="); url=urls[0]+"embed/"+urls[1]+"?rel=0"; tmp+="<BR><iframe width="+MEDIA_WIDTH+" height="+ MEDIA_HEIGHT+" src='"+url+"' frameborder=0 allow='"+ "accelerometer; clipboard-write; encrypted-media; "+ "gyroscope; picture-in-picture' allowfullscreen></iframe><BR>"; } tmps[i]=tmp; } else tmps[i]=tmp.replace(/ /gi,"&ensp;"); // 把大部份行的空白以 &ensp; 替代 } content="<font size="+FONT_SIZE+">"+tmps.join("<BR>")+"</font>"; document.getElementById("show_zone").innerHTML=content; window.scrollTo(0, 0); } window.scrollTo(0, 0); 的意思就是,我希望使用者每点击一次子项目, 就自动回卷到最上面。早前我用 href 的做法,它在协作网页上会出现不 符预期的错误(不管是 a href 或 window.location.href 都一样),但是 用 window.scrollTo(0, 0); 就不会。 如果没有使用 window.scrollTo(0, 0),在观看某个文章到一半,点击其 它文章时,它不会从最上面开始。 这是 google 到的,我事前也不知道有这东西,而且我是先找到 jQuery 的做法,然後才推敲应该 JS 本身就有支援的语法。 那所以透过 document.getElementById("show_zone").innerHTML 显示出 右侧内容後,再用 window.scrollTo(0, 0) 就可以把卷轴回卷到最上面, 这样每点击一篇文章,就都会从最上面开始。 从上面可看出它的 frame 结构其实是透过 <div> 虚拟而成的,我很早就 想写这个,因为协作网页要以内嵌程式码的方式去弄 frame 我觉得挺困难 的,但是用虚拟的就没问题了,所有的资料(连同游记文)全都放在同一个 .htm 档内,并能依我自订的「网页模板」去显示我的网站内容。 而以下就可视为我自己简单架设的网站(它其实只是一个网页) https://sites.google.com/view/myjapantravel 而且页面呈现大多可由我自订,如同其它部落客的网站一样。 目前它的缺点是还没有办法透过在网址後给定参数的方式,去显示特定的 文章,下午再来研究。 不过它不是我的重点,确定能以这个来虚拟 frame/网站分页 才是我的主 要目的。 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.33.66.104 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Web_Design/M.1606797127.A.DB0.html ※ 编辑: laechan (114.33.66.104 台湾), 12/01/2020 14:06:50
1F:→ laechan: url後面抓参数挺麻烦的..大概用其它变通的做法 12/02 10:48
2F:推 cocoasheep: 最大的问题应该是档案大小吧,光载入一页就36MB 01/10 18:45
3F:→ laechan: 其实这东西我选择用javascript写是有点想在自己本机跑的 01/14 08:03
4F:→ laechan: 用意,只是因为刚好也是htm档所以也能丢到协作平台 01/14 08:03
5F:→ laechan: 随身碟我是随身携带的,主要就是想要找游记资料时随时可叫 01/14 08:04
6F:→ laechan: 出来,它若不载入图片或图片有经打薄其实消耗流量不会很高 01/14 08:05
7F:推 cocoasheep: 原来如此 蛮方便的 01/16 20:53







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP