JS初体验-做一个导航页面

参考一个并不好看的页面:http://www.36start.com/
本博客着重写javascript,所以关于css要求能用就写

1. 准备构思

先画一个用例图
用例图
选择数据结构

有hash,有四个数组。
为了简化一下,去掉最上面一行,三个数组就够了

2. 写代码

HTML的基本结构和构思
  1. 在<body>里写<header>,<main>,<footer>三个标签作为基本结构
  2. 在<main>里生成网页上键盘的代码,所以要再加个<div>在里面,用来控制键盘的居中
  3. 用<kbd>表示键盘的按键,再加个<button>用于用户修改该按键的网页信息(用js生成即可)
  4. 给<main>下面的<div>加一个id,名为id="divFirst",用于js定位
用JS生成HTML元素
  1. 声明数组和hash
    在<body>里写<script>,直接在里面写:
keys = { //声明一个二维数组,用于后面生成<div>,<kbd>以及<button>
  '0':{0:'q',1:'w',2:'e',3:'r',4:'t',5:'y',6:'u',7:'i',8:'o',9:'p',length:10},
  '1':{0:'a',1:'s',2:'d',3:'f',4:'g',5:'h',6:'j',7:'k',8:'l',length:9},
  '2':{0:'z',1:'x',2:'c',3:'v',4:'b',5:'n',6:'m',length:7},
  'length':3
}
hash = {  //声明一个hash,用来存按键对应的网址
  'q':'qq.com',
  'w':'weibo.com',
  'e':'ele.me',
  ....
 }
  1. 给<main>添加一个<div>,重复三次,以储存三排键盘
    继续写
index = 0
while(index < keys['length']){  //当index小于keys数组个数时,执行以下代码,直到不满足条件为止
  div1 = document.createElement('div')  //文档.创建一个标签名为div的标签,放入div1容器中
  divFirst.appendChild(div1)  //给divFirst容器追加一个名为div1的儿子
  index = index + 1  //每次循环完index+1,共循环3次
}
  1. 给每一个<div>里添加一排该行个数的<kbd>
    且每个<kbd>中含有其对应的键盘值
    可以从keys中取
    写在创建三个div的循环里
row = keys[index] //第一个数组 第二个数组 第三个数组 也就是key的length值
index2 = 0
while(index2< row['length']){ // 0-9 0-8 0-7三个数组的length值
  kbd1 = document.createElement('kbd')  //文档.创建一个标签名为kbd的标签,放入kbd1容器中
  kbd1.textContent = row[index2]  //三个数组对应的键盘值写到kbd1中
  div1.appendChild(kbd1)  //把kbd1的值追加到div1容器中
  index2 = index2 + 1  //循环该行键位个数的次数
}
用CSS让键盘居中
  1. 先让所有小写英文字母变成大写字母
div > kbd{
text-transform:uppercase;
}
  1. 将<main>下面的<div>变成内联元素,然后给他的父元素加上text-align:center使键盘居中
  2. 完整代码为
*{margin:0;padding:0;}
a{text-decoration: none;}
div > kbd{
    border:1px solid red;
    width:4em;
    height:4em;
    display: inline-block;
    text-transform: uppercase;
    position: relative;//给后面按钮定位准备的
}
JS监听键盘

比如,需求是用户输入键位时,打开对应网页
使用键盘监听事件即可

document.onkeypress = function(fjogjosjogo){
//这个名为"fjogjosjogo"的hash里包含了用户输入的所有信息,当然名字是随便取的
  key = fjogjosjogo['key']    // q s d j...拿到用户按的键
  website = hash[key]     //得到hash数组中对应按键的地址
  window.open('http://' + website, '_blank')
//使用http协议在新窗口页面访问该地址
}
用户可编辑hash

用户可编辑键位对应网址
且刷新页面可保存
先把<button>写到每个<kbd>中
然后让用户点击按钮可把hash变更后的值写入浏览器的loclaStorage中
以下内容写在<kbd>的循环中

button1 = document.createElement('button')
button1.textContent = '编辑'
button1.id = row[index2]    //给每个按钮标记以其对应的字母id
button1.onclick = function(fjogjosjogo){    //当用户点击时,去fjog..中取要的值
  key = fjogjosjogo['target']['id']    //取fjog..中的target值的id,存到key容器中
  urlId = prompt('给我一个网址')  //浏览器弹出一个输入框,把用户输入的值存到urlId这个容器中
  hash[key] = urlId   //hash变更
  localStorage.setItem('hashEnd',JSON.stringify(hash))    //localStorage里有很多桶,hashEnd就是桶的名字。将变更后的hash存到hashEnd这个容器里
}
kbd1.appendChild(button1)

如果存在变更后的hash值,就取出localStorage中变更后的hash值,覆盖原网页的hash值
以下内容写在所有循环外

//取出 localStorage 中的hashEnd对应的hash
hashInLocalStorage = JSON.parse(localStorage.getItem('hashEnd') || 'null')
if(hashInLocalStorage){ //如果浏览器中的hashEnd存在
  hash = hashInLocalStorage   //就拿hashEnd覆盖网页的原hash
}
用css装饰按钮

使按钮hover时才出现

div > kbd > button{
  position: absolute;
  right:0;
  bottom:0;
  display: none;
}
div > kbd:hover> button{
  display:inline-block;
}
main{text-align: center;}
main> .wrapper{
  display: inline-block;
}

完成

到这里就完成了所有js的工作
接下来就需要用css好好装饰页面了
我的项目地址:点击这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,347评论 1 45
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,703评论 1 92
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,945评论 4 60
  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 746评论 0 3
  • 后天就是父亲节,可以预料的是,空间、朋友圈里各种的祝父亲节快乐,像母亲节一样。 上次一朋友在票圈发了母亲节祝福的话...
    粤好吃阅读 412评论 0 0