美文网首页
JS初体验-做一个导航页面

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

作者: 酒极子 | 来源:发表于2019-01-22 19:50 被阅读37次

    参考一个并不好看的页面: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好好装饰页面了
    我的项目地址:点击这里

    相关文章

      网友评论

          本文标题:JS初体验-做一个导航页面

          本文链接:https://www.haomeiwen.com/subject/vrkrjqtx.html