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

最终效果

KeyboardNav使用指南:

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

数据结构的使用

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

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

报错学习

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

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++;
}

键盘监听事件


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

 //监听键盘被按事件
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

使用console.log(jfglkhj.target);

console.log(jfglkhj.target.id);

localStorage初步理解

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

问题解决思路:

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

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

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
}

上面是覆盖代码

位置:

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

其他

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

纯JS实现KeyboardNav(学习笔记)一的更多相关文章

  1. 纯JS实现KeyboardNav(学习笔记)二

    纯JS实现KeyboardNav(学习笔记)二 这篇博客只是自己的学习笔记,供日后复习所用,没有经过精心排版,也没有按逻辑编写 这篇主要是添加css,优化js编写逻辑和代码排版 GitHub项目源码 ...

  2. [360前端星计划]BlackJack(21点)(纯JS,附总部学习笔记)

    [360前端星计划]总部学习笔记(6/6) [360前端星计划]详情跳转 游戏界面预览 目录 一.游戏介绍 1.起源 2.规则 3.技巧 二.游戏设计 1.整体UI构思 2.素材采集 3.游戏总规划 ...

  3. 【09-23】js原型继承学习笔记

    js原型继承学习笔记 function funcA(){ this.a="prototype a"; } var b=new funcA(); b.a="object a ...

  4. Underscore.js 源码学习笔记(下)

    上接 Underscore.js 源码学习笔记(上) === 756 行开始 函数部分. var executeBound = function(sourceFunc, boundFunc, cont ...

  5. Underscore.js 源码学习笔记(上)

    版本 Underscore.js 1.9.1 一共 1693 行.注释我就删了,太长了… 整体是一个 (function() {...}());  这样的东西,我们应该知道这是一个 IIFE(立即执行 ...

  6. 浏览器中js执行机制学习笔记

    浏览器中js执行机制学习笔记 RiverSouthMan关注 0.0772019.05.15 20:56:37字数 872阅读 291 同步任务 当一个脚本第一次执行的时候,js引擎会解析这段代码,并 ...

  7. JS第一周学习笔记整理

    目录 JS正式课第一周笔记整理 JS正式课第一周笔记整理 webstorm : 代码编辑器 浏览器: 代码解析器: Git : 是一个工具;用于团队协作开发项目管理代码的工具:在工作中用git.svn ...

  8. Vue.js 源码学习笔记

    最近饶有兴致的又把最新版 Vue.js 的源码学习了一下,觉得真心不错,个人觉得 Vue.js 的代码非常之优雅而且精辟,作者本身可能无 (bu) 意 (xie) 提及这些.那么,就让我来吧:) 程序 ...

  9. JS与Jquery学习笔记(二)

    一. JS 的面向对象 JS没有类,其类就用function来代替如下所示: function Cat(name, color){ this.name=name; this.color=color; ...

随机推荐

  1. Docker系列六: 使用Docker官方公共仓库和私有仓库

    使用公共仓库 登陆官方网站:https://hub.docker.com/   注册账号和密码 在Docker hub中创建一个资源,  create  respositories,   创建后会提示 ...

  2. iOS仿抖音节拍界面、Swift,MVVM架构完整项目、日历demo、滚动切换分类等源码

    iOS精选源码 在Object-C中学习数据结构与算法之排序算法 日历-基本功能都有的日历 选择日期 上下月 动画 仿抖音卡节拍界面 垂直.水平方向皆可滚动.header悬浮的列表视图 Auto La ...

  3. 吴裕雄--天生自然python学习笔记:python用OpenCV 读取和显示图形

    Open CV 是一个开源.跨平台的计算机视觉库,它可 以在商业和研究领域中免费使用,目前已广泛应用于人机 互动.人脸识别.动作识别.运动跟踪等领域. 要识别特定的图像,最重要的是要有识别对象的特征 ...

  4. spring-boot jpa mysql emoji utfmb4 异常处理

    spring-boot jpa mysql utf8mb4 emoji 写入失败 mysql database,table,column 默认为utf8mb4 Caused by: java.sql. ...

  5. ESTScan|EORF|Augustus|nr|PSM|

    生物信息学方法的目的有二:1.常规找鉴定已知蛋白2.鉴定新蛋白 控制数据库大小可以通过增多酶切使得大数据库灵敏性增高数据量变小: 分步搜索是对于经典方法使用后找不到的新蛋白进行补充挖掘,预测蛋白与高可 ...

  6. Python-SSH批量登陆并执行命令

    Python-SSH批量登陆并执行命令 #!/usr/bin/env python #-*- coding:utf-8 -*- import paramiko from time import cti ...

  7. MAVEN实现多环境搭建

    在实际的开发中,会遇到开发环境的不同(开发环境,测试环境,线上环境),会来回根据环境的不同修改配置文件,一不小心修改错误导致无法正常运行,故障排除导致开发效率低.使用maven可以根据环境的不同,自动 ...

  8. 密码子演化假说|凝固事件假说|立体化学假说|共进化假说|代谢途径相关性假说|四重兼并|假四重兼并|最小损伤原则|AU-rich|GC-rich|逐步进化假说|分子机制进化假说

    生命组学 将密码子表重排后发现,嘌呤嘧啶含量不同,密码子的氨基酸种类由第一二位决定,同时第三位变化大却没有蛋白质层面上实质性的改变,这说明第三位氨基酸是用于维持氨基酸组成不发生变化同时保证蛋白质稳定性 ...

  9. leetcode第23题:合并K个排序链表

    首先我想到的是采用一般递归法,将K个链表合并化为(k-1)两个链表合并 class Solution: def mergeKLists(self, lists: List[ListNode]) -&g ...

  10. python3下scrapy爬虫(第四卷:初步抓取网页内容之抓取网页里的指定数据延展方法)

    上卷中我运用创建HtmlXPathSelector 对象进行抓取数据: 现在咱们再试一下其他的方法,先试一下我得最爱XPATH 看下结果: 直接打印出结果了 我现在就正常拼下路径 只求打印结果: 现在 ...