Javascript

.target不行时,试试.currentTarget  .target是点击或操作的(可能是a的span),.currentTarget是监听的  T23-4-23.34

location:  location.href 当前网站地址,可以location.href='http://' + str  更改跳转页面(模拟用户在地址栏输入)。

可以选择使用.id   来调试

刷新页面后编辑内容消失,变更时用localstorage存

调bug1.0:

                iconImg = document.createElement('img')

                if (hash[row[index2]]) {

                    iconImg.src = 'http://' + hash[row[index2]] + '/favicon.ico'

                } 

               keybd.appendChild(iconImg)

上面正确,下面错误。原因应该是,如果不满足条件生成不了iconImg,会出现指定混乱。

                if (hash[row[index2]]) {

                   iconImg = document.createElement('img')

                    iconImg.src = 'http://' + hash[row[index2]] + '/favicon.ico'

                }

                keybd.appendChild(iconImg)

出错时候,先看target指向哪里,然后修改target指向的东西。例如:                iconImg.onerror = function (xxx) {

                    // console.log('error here!!!!!!!!!')

                    // console.log(xxx)

                    xxx.target.src = './img/13.png'

                }


bug未解决1.0 ??        

            var div1 = tag('div', {

                className: 'row' //三行

            })

function tag(tagName, attributes) {

            var element = document.createElement(tagName)

            for (var key in attributes) { //key 为 className,id,textContent

                console.log(key)

                // element[key] = attributes[key]       //这个可以

                element.key = attributes[key]           //这个不行

            }

            return element

        }

错误监听:元素 .onerror属性

拿元素兄弟节点:.previousSibling   .nextSibling 注意,可能会找到回车,记得多.几次(详情见mdn)

.nodeType:可以与上一条结合使用,.nodeType === 3 是文本, ===1 是元素节点 详情见nodeType mdn

获取页面宽高: var pageWidth = document.documentElement.clientWidth;

  var pageHeight =    document.documentElement.clientHeight;

if无花括号只管后一行

console.log(x)

var x = 1   看似先后执行,实际上顺序为  var x; console.log(x);  x = 1; 不会报错,会undefined  很烦。。易bug

canvas context需要在设定好画板大小后才可以使用   var context = yyy.getContext('2d');

// context.strokeStyle = 'red'    //必须在设定好画板大小后才有用。

鼠标不点击,但点击效果:.click()方法。可以用于a标签

7种数据类型:1.数字 number 2.字符串 string 3. 布尔 boolean 4. symbol(符号) 5. null 6. undefined 7. 对象 object(function是对象)

除了前六种,其他都是对象。

null 和 undefined区别

1. 变量没有赋值--undefined     2. 有一个对象object,但现在没有赋值,推荐null。  有一个非对象,目前不想给赋值-- undefined

浏览器console.log瞎打的,不注重格式

可以对象里面套对象(都hash表)

typeof bug: bug1 type of null : 'object'          typeof function   : 'function'(没有这类数据类型)

变量a是否声明过:  if('a' in window)

知道对象有哪些key:Object.keys

对象的keys是无序的。

Base64:字符串->base64编码(仅限ascii编码)  atob(str)  base64->64 : btoa(str)   

var name = 'x'      object.name  name是字符串的name。相当于从object找的key为'name',其与object['name']相同。  object[name] 则为object[ 'x' ] 

转string

null, undefined 无toString()   obejct toString() 可以但得不到我们想要的,想得到类似

"{name: 'efho'}" 必须自己写函数

console.log 原则上只接受字符串。

数字必须加括号 toString  例如:(1).toString()

简单变字符串--与空字符串相加   xxx +   ''   所有都可以转为string

与字符串相加,优先转字符串。  例如:1+'1'  = '11'

还有一个方法,window.String(xxx)  功能和+空字符串一样强大。

转boolean:

Boolean(0) = false ,   Boolean(1) = true,   Boolean('') = false  ,   Boolean('    ') = true  ()Boolean(null) = false   Boolean(undefined) = false.     Boolean({}) = true

也可以用  !!两个感叹号

Boolean后为false :     number: 0,NaN    string: '' 空字符串    null为false,undefined为false

所有object都是true  包括 array和function

Falsy 5个  0 NaN  null  undefined  ''     Boolean后为false 

垃圾回收

把每个页面用完的内存还给浏览器给别的页面

什么时候垃圾回收:如果一个对象没有或者失去被引用,它就是垃圾,将被回收。

回收需要费cpu,不一定什么时候回收

有一好题目,

var fn = function(){}

document.body.onclick = fn

var fn = null   此时function(){}的内存被回收了吗?没有。因为 document.body.onclick 和 fn 在stack中保有function(){}的内存地址,fn的凉了,另一个还在。

但是如果页面关闭,全凉

IE6 相互指但失去了stack内存地址的内存块不会被回收,会垃圾堆积。可以使用 window.onunload = function(){

document.body.onclick = null

}

如果监听100个div的onmouse,什么的,需要100个上图所示代码。

浅拷贝与深拷贝

var a = 1     b变不影响a,则是深拷贝

var b = a

b = 2

a 还是 = 1

基本类型(除了对象),简单的赋值就是深拷贝。

////////////////////////////////////

var a = {name:'a'}   var  b  =  a      b.name = 'b',此时a.name = 'b'   此时是浅拷贝。

JS中的对象

浏览器 哪里都可以访问到 window

window属性分两类

1. ecmaScript 规定。parseInt parseFloat Number String Boolean Object.  window.setTimeout  在多少毫秒后执行某函数。

2. 私有、浏览器自己搞得(chrome/firefox)  alert 弹框提示  prompt 用户填写 confirm用户确认 console 开发者打印。  document(文档)代表能对文档的一切操作,是私有的!!!自己的规范是DOM(W3C制定)window.history(浏览器专属对象)(BOM标准) 可以返回上一界面。



1.  Number('1')    2.  var n = new Number(1)    把1包装成了对象!!!stack存地址,调用valueOf()函数获取值(有了valueOf这一属性)。但是 var n = 1 也可以toString(),实际上,BE搞了技巧。var n = 1 n.toString()  ===  var n = 1; temp = new Number(n); n = temp.toString();  之后temp被消除     var n = 1;   n.xxx = 2;  可以,不报错。  然而,打印n.xxx为undefined。因为第一个temp被抹杀了,第二个里没有xxx这个属性

String()和Number()类似,var a = 'fgsgsdg'也就是在stack,要各种其他函数属性都有temp变量。记忆几个函数: a.charCodeAt(0) = 97 ,unicode编码。 'a'.charCodeAt(0).toString(16) = '61'  可以16进制表示97

重点API  

去掉字符串两边的空格(用户输入账号密码。。):  a = '   safa    ';  a.trim();即可

字符串连接:  s1.concat(s2)

字符串切片:slice   例如:var s1 = 'hello'   s1.slice(0,2) = 'he'  包前不包后。

字符替换:var s1 = 'hello'   s1.replace('e', 'o') = 'hollo'

Boolean:   也基本类似。

var f = false    var f2 = new Boolean(false)     if(f){console.log(1)}     if (f2){console.log(2)}  !!!打印这个,所有对象都是truey。

对象:

var o1 = {}   var o2 = new Object()       这两个语句完全没区别


最大是Object类,String、Number、Boolean、Function(但是很特殊先不考虑他,后面讲)是Object子类,他们三个的实例对象拥有属性__proto__指向一片共有空间,那片空间里还有__proto属性,指向另一片为Obejct准备的空间。

如果不引用那片公共空间会导致垃圾被回收,所以全局window的Number、Object、String、Boolean、Function(它特殊不指向Object.prototype后面单独讲)函数存在.prototype来指向它,让他不被回收

Object.prototype  可以看到Object原型,也叫共有属性。  

var o1 = {}   o1.__proto__ === object.prototype  

var n1 = new Number(1)     n1.__proto__ === Number.prototype  n1.__proto__.__proto)) ===Object.prototype

面试题目:函数的.prototype 是对象吗?是!不是对象怎么能存hash呢。

对象.__proto__ === 函数.prototype

函数.prototype.__proto__ === Object.prototype

Function.__proto__ === Function.prototype

Function.prototype.__proto__ === Object.prototype

JS 所有对象都有__proto__只有Object的__proto__指向null

Function 是特殊的函数,因为他还需要构建其他的函数,就和Object有点像。所以全局Function有属=属性.prototype指向某内存空间保存Function共用属性(防止垃圾回收),Function也是一个函数,所以 Function的__proto__也指向那片共用属性(不光他构建的儿子要用,当爹的也要用)因为 Function的__proto__和.prototype存的是同一个地址,所以,他们两个互相指向对方。

总结就是,Function 和 Object一样diao! 


JS特效

sticky navbar 不管怎么滚动,导航不动

auto highlight navbar 滚到哪里,导航栏某一项高亮。

auto scroll smoothly 点一下导航栏每项就自动定位到那里

border从左往右滑 css js皆可做

menu 菜单 鼠标放上去出菜单

auto hide aside 自动隐藏的侧边栏。

gapless(存疑) slides(轮播)无缝轮播

loading animation 加载动画

animate when scroll 滚动才会动的动画。

延迟效果:

        setTimeout(function () {

            siteWelcome.classList.remove('active')

        }, 2000)

滚动时效果 搜索 mdn window scroll。

window.onscroll = function(xxx){

console.log(window.scrollY)

}

JS只改变class,其他一概不动,js就能写好

鼠标进入:.onmouseenter

鼠标出来:.onmouseleave

tagName找标签:.tagName  注意,返回的是大写的!!可以.tagName.toLowerCase()变小写(文本节点.tagName是undefined。没有这个方法,会报错,算了,还是别用了)

尽量从响应事件里取信息,比如xxx.onclick = function(xxx){} 从xxx中取,JS不可靠。

.target不行时,试试.currentTarget  .target是点击或操作的(可能是a的span),.currentTarget是监听的  T23-4-23.34

阻止默认动作,不要浏览器设置的,我们自己弄  a.onclick = function(x){ x.preventDefault() } 阻止浏览器默认跳转方式

a标签.href 获取的地址是带有http协议的,

要用a.getAttribute('href')获得 我们写的的href,例如 #siteAbout

document.querySelectorAll('nav.menu >ul >li > a')

let href = a.getAttribute('href')      // '#siteAbout'

查找id需要#   let element = document.querySelector(href) 返回第一个元素

查找class      var el=document.querySelector(".myclass");

OffsetTop得到元素距离页面最顶端距离:.offsetTop 不会变

窗口滚到指定位置:window.scrollTo(0, top)   x轴不变,y轴到top

setTimeout()  只有一次

setInterval()   一直动,除非clear了

JavaScript之scrollTop、scrollHeight、offsetTop、offsetHeight等属性学习笔记

https://www.cnblogs.com/wenruo/p/9754576.html

window.scrollY: 页面往下滚动了多少距离

元素.offsetTop 该元素相对于页面顶部滚动距离。

tweenjs 缓动,使动画更自然。 

缓动函数速查表:easings.net

获取库在线地址(不下载):cdnjs搜索库名

html给元素属性,并用js获取:<section data-x id='siteSkills' class="skills">

不知道为什么可以这样,大概就这么给属性的。。

specialTags = document.querySelectorAll('[data-x]')   如果是只要section标签的需要写作'section[data-x]'

可以获取属性,然后获取id,

通过id获取a标签  let a = document.querySelector('a[href="#' + id + '"]')  注意必须有双引号

获取父节点 .parentNode   

获取兄弟和自己  .parentNode.children


 window.onscroll = function (xxx) {   这样的只能一次,赋值只能一次。

可以这样:用队列

        window.addEventListener('scroll', function (x) {

            findClosestAndRemoveOffset()

        })

        window.addEventListener('scroll', function (xxx) {

这样可以添加两次


window.addEventListener('scroll', function (xxx)     这里面用this指的是滚动的元素,可以用bind(this)约束  详情:T36-6


箭头函数内外this不变,箭头函数没传统意义上的this


阻止默认刷新

myForm.addEventListener('submit', function (e) {

    e.preventDefault() // 不然默认刷新一下页面

帮用户刷新:

window.location.reload()


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