纯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. [LC] 255. Verify Preorder Sequence in Binary Search Tree

    Given an array of numbers, verify whether it is the correct preorder traversal sequence of a binary ...

  2. 如何使用jQuery给asp.net的TextBox取值和赋值

    解决办法: 可以在控件中先设置属性ClientInstandName的值和ID的值一样,再使用$("#ID").val("12345")

  3. LeetCode No.97,98,99

    No.97 IsInterleave 交错字符串 题目 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 输入: s1 = "aabcc&qu ...

  4. PAT甲级——1036 Boys vs Girls

    1036 Boys vs Girls This time you are asked to tell the difference between the lowest grade of all th ...

  5. java高并发之线程池

    Java高并发之线程池详解   线程池优势 在业务场景中, 如果一个对象创建销毁开销比较大, 那么此时建议池化对象进行管理. 例如线程, jdbc连接等等, 在高并发场景中, 如果可以复用之前销毁的对 ...

  6. 01-信贷路由项目架构和 rose 框架的搭建

    1.信贷路由项目架构 2.工程搭建及测试 搭建tyrRouter-parent,tyrRouter-log-web,工程采用 maven 构建 配置 pom.xml 文件,父项目管理 jar 包的版本 ...

  7. java replaceall 用法:处理特殊字符

    public class TryDotRegEx { public static void main(String[] args) { // TODO Auto-generated method st ...

  8. Users组权限Win7虚拟机继承Administrator的个性化设置

    在administrator账号下进行的模板设置,配置文件保存在“C:\Documents and Settings\Administrator”文件夹下的profile里面,但是创建的用户虚拟机获取 ...

  9. seckill

    京东自动登录 注:本文所做操作皆以京东web为例 包含:xpath,splinter,ocr 遇到的坑: 登录页面通过查看网页元素,能看到账户,密码唯一id,但是执行 12 browser.fill( ...

  10. Markdown快速使用指南

    Markdown 是一种轻量级的标记语言,他简洁.高效,目前被越来越多的写作爱好者,撰稿者广泛使用.Markdown的语法十分简单.常用的标记符号也不超过十个,这种相对于更为复杂的 HTML 标记语言 ...