纯JS实现KeyboardNav(学习笔记)

纯JS实现KeyboardNav(学习笔记)一

最终效果

最终效果

KeyboardNav使用指南:

  • 左下角为网站的icon,'.'代表网站无icon或未设置网站
  • 按键盘上相应的按键进入对应网站
  • 鼠标放上去可编辑并保存网站,除了初始网站,用户编辑的网站存在本地cookies
  • 清空cookies后保存在本地的网站将被清除,还原会初始状态

数据结构的使用

哈希,数组
做出来导航页面

clipboard.png
clipboard.png

实际上数组就是hash
数组带方括号其实是hash的一种简写.
且数组是对象.

报错学习

clipboard.png

JS错误:没有被处理的 语法错误 :不期待的字符串]
意思就是这里不应该有字符串]
语法错误


clipboard.png

css重要代码

text-transform: uppercase;
        /*文本小写变大写*/

#mainxxxx{
    display: inline-block;
}
main{
    text-align: center;
}
/*mainxxx这个div居中*/
#mainxxxx>div:nth-child(2){
    margin-left: 1em;
}

#mainxxxx>div:nth-child(2)代表mainxxxx的名为div的第二个子元素.

定位kbd里面的button,并添加hover

kbd>button{
    position: absolute;
    right: 0;
    bottom: 0;
    display: none;
    /*绝对定位到右下角*/
}
kbd:hover>button{
    display: inline-block;
    /*鼠标浮到kbd上才出现*/
}

box-shadow使用指南

  • inset

默认阴影在边框外。
使用inset后,阴影在边框内(即使是透明边框),背景之上内容之下。

  • <offset-x> <offset-y>
    这是头两个 <length> 值,用来设置阴影偏移量。<offset-x> 设置水平偏移量,如果是负值则阴影位于元素左边。 <offset-y> 设置垂直偏移量,如果是负值则阴影位于元素上面。可用单位请查看 <length> 。
    如果两者都是0,那么阴影位于元素后面。这时如果设置了<blur-radius> 或<spread-radius> 则有模糊效果。
  • <blur-radius>
    这是第三个 <length> 值。值越大,模糊面积越大,阴影就越大越淡。 不能为负值。默认为0,此时阴影边缘锐利。
  • <spread-radius>
    这是第四个 <length> 值。取正值时,阴影扩大;取负值时,阴影收缩。默认为0,此时阴影与元素同样大。
  • <color>
    相关事项查看 <color> 。如果没有指定,则由浏览器决定——通常是color的值,不过目前Safari取透明。

最常用的是后五个值,例子:

/* offset-x | offset-y | color */
box-shadow: 60px -16px teal;

/* offset-x | offset-y | blur-radius | color */
box-shadow: 10px 5px 5px black;

/* offset-x | offset-y | blur-radius | spread-radius | color */
box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2);

/* inset | offset-x | offset-y | color */
box-shadow: inset 5em 1em gold;

/* Any number of shadows, separated by commas */
box-shadow: 3px 3px red, -1em 0 0.4em olive;

循环遍历二元数组

//遍历keys,生成kbd标签
        var index = 0;
        while (index< keys['length']){
            var divxxxx = document.createElement('div');
            mainxxxx.appendChild(divxxxx);

            row = keys[index];
            index2 = 0;

            while (index2<row.length){
                kbdxxxx = document.createElement("kbd");
                kbdxxxx.textContent = row[index2];
                divxxxx.appendChild(kbdxxxx);
                index2++;
            }
            index++;
        }

键盘监听事件

clipboard.png

这个hash容纳你所需要的所有细节:
例如altkey可以看出你再按m的时候是否同时按了<kbd>alt</kbd>

 //监听键盘被按事件
        document.onkeypress = function (sjdhfakdhjlsdka) {

            //sjdhfakdhjlsdka这个参数  包含你想要知道的所有信息,是一个hash
            key = sjdhfakdhjlsdka['key'];//得到用户的键
            website = hash[key];//获取网站地址

            // location.href = 'http://'+website;//将键变成新的网站的地址
            //location.href当前地址栏.地址
            //

            window.open('http://'+website,"_blank");
            //window.open  窗口.打开  "_blank"新窗口打开.

        }

button编辑hash(event的target)

//每一个kbd里面加入button
                buttonxx = document.createElement("button");
                buttonxx.textContent = "编辑";
                // 每一个button的id都是row[index2],即kbd里面的内容,以便区分
                buttonxx.id = row[index2];
                //添加button点击事件
                buttonxx.onclick = function (jfglkhj) {
                    //☆☆☆☆这里不能用this,也不能用buttonxx,因为buttonxx只是一个容器,每一次循环,里面放的东西都不一样
                    // 最后他里面放的东西是最后那个createElement("button").所以不行
                    //例如
                    // console.log(buttonxx);
                    // 不管按那个键,所有的打印出来的都是最后一个button
                    //解决方法:使用 jfglkhj.target ,指的就是当前完整元素.
                    // 例如:
                    // console.log(jfglkhj);
                    //console.log(jfglkhj.target);
                    // console.log(jfglkhj.target.id);

                    key = jfglkhj.target.id;//比如说v
                    //或者jfglkhj['target']['id'];
                    x = prompt('给我一个网址');//比如说mtt.com
                    hash[key] = x;//赋值
                    
                };
                kbdxxxx.appendChild(buttonxx);

如果使用buttonxx


使用buttonxx

使用console.log(jfglkhj.target);


使用console.log(jfglkhj.target);

console.log(jfglkhj.target.id);


console.log(jfglkhj.target.id);

localStorage初步理解

没有办法让js变量在下一个页面出现,无法改变js源代码.只能把hash这个变量存到js之外的地方.

问题解决思路:


clipboard.png

每次变更hash就找一个地方备份,下次刷新,就覆盖原来的hash

一变就存,一刷新就覆盖.
查看localStorage


查看localStoraeg

localStorage,只要编辑了,我就存

                    x = prompt('给我一个网址');//比如说mtt.com

                    hash[key] = x;//赋值

                    // 问题:刷新之后编辑的网址没有了
                    // 解决方法:使用localStorage,只要变就备份,只要刷新就覆盖
                    //如果hash变更,只要编辑了,我就存
                    localStorage.setItem("zzz",JSON.stringify(hash));//JSON.stringify(hash)把hash变成字符串,存到zzz变量里备份

                    //上面这句代码的作用:localStorage里有很多桶,吧hash存到zzz这个桶里
                    //每一次编辑,就把新的hash存到  浏览器里
                    //然后把这个浏览器里的hash覆盖原来的就可以了
                    //熟悉原理:一变更就存档

上面是备份hash代码

//把localStorage里hash,zzz拿出来
        var hashINLocalStorage = JSON.parse(localStorage.getItem('zzz')|| 'null');
        if(hashINLocalStorage){ //如果hashINLocalStorage不为空,第二次刷新就不为空了.
            hash = hashINLocalStorage;//覆盖hash
        }

上面是覆盖代码

位置:

clipboard.png
clipboard.png

经测试,缓存清空localStorage就没有了

其他

js声明变量并赋值

程序员评分与努力程度的关系

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

推荐阅读更多精彩内容

  • 前端开发面试题 <a name='preface'>前言</a> 只看问题点这里 看全部问题和答案点这里 本文由我...
    自you是敏感词阅读 746评论 0 3
  • HTML 5 HTML5概述 因特网上的信息是以网页的形式展示给用户的,因此网页是网络信息传递的载体。网页文件是用...
    阿啊阿吖丁阅读 3,792评论 0 0
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    程序员poetry阅读 114,120评论 24 450
  • 1.自尊是什么?自尊是你用一分钟的时间叫我离开你,我一定会在一分钟之内从你面前彻底地消失。 2.一杯淀粉本质终还是...
    BAOBAO蓝阅读 157评论 0 0
  • 4月15日,86版《西游记》导演杨洁与世长辞,享年88岁。昨日,六小龄童、冯远征等人纷纷在微博发文缅怀杨洁。杨洁1...
    江西安福伊伊秋水阅读 246评论 0 1