美文网首页
<JavaScript>总结:注意点

<JavaScript>总结:注意点

作者: 玉圣 | 来源:发表于2018-05-09 13:21 被阅读11次

一、事件

1、a标签中点击事件

1、描述示例:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>a标签点击事件</title>
</head>
<body>
    <a href="images/1.jpg" title="图片1"></a>
    <a href="images/2.jpg" title="图片2"></a>
    <script>
        window.onload = function () {
            var aLists = document.getElementByTag("a");
            for(var i=0; i<aLists.length; i++) {
                aLists[i].onclick = function() {
                    console.log("点击了" + this.title);  //注意这里用this
                }
            }
        }
    </script>
</body>
</html>

2、现象需求:
当点击了a标签之后,会跳转到相应的图片展示页面。

如果点击a标签之后,不想要跳转到链接的href的地址,而仅仅是想要只想一些其他的操作。

3、解决方案:
若不想跳转到指定的链接地址,则可以通过a标签的onclick事件的函数,返回一个false,即可。代码如下:

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>a标签点击事件</title>
</head>
<body>
    <a href="images/1.jpg" title="图片1"></a>
    <a href="images/2.jpg" title="图片2"></a>
    <script>
        window.onload = function () {
            var aLists = document.getElementByTag("a");
            for(var i=0; i<aLists.length; i++) {
                aLists[i].onclick = function() {
                    console.log("点击了" + this.title);  //注意这里用this
                    return false;
                }
            }
        }
    </script>
</body>
</html>

4、注意:
这里需要注意的是,在遍历处理a(或其他)标签的点击(其他监听)事件的时候,要在其function中使用 this 来进行代替列表子元素去处理,因为这里涉及到同步和异步的问题,即当点击这个标签的时候,所对应的索引i 可能已经变化,并非当前的这个元素,因此可能会导致事件混乱。

2、高频率事件的节流:

在一些事件使用的时候,调用的频率是非常高的,比如:
window.onload window.onresize window.onscroll 等等
频繁的调用这些事件,会使得内存消耗过大,因此,需要在使用过程中避免调用过于频繁,这里就需要用到节流的技巧,如:

    var timer = null;
    var mouseDelay = 200;   //一般鼠标的延迟时间
    window.onscroll = function () {
        clearTimeout(timer);
        //节流
        timer = window.setTimeout(function () {
            //do something...
        }, mouseDelay);
    };

二、属性:

1、style.xxx和offsetxxx的区别及注意点:

以left为例
style.left只能获取行内的样式,而offsetLeft则可以获取到所有的
注意:在JavaScript中进行设置element.style.xxx的时候,是设置到其标签(行内)上的属性的,所以如果在做一些动画或者过渡效果的时候,通过修改已经设置了的行内style属性时,是需要在<style>中的动画(或过渡效果)的属性中添加!important 来提高此属性的级别,以达到相应的效果。

offset 各属性区别

2、兼容性属性:

1、opacity 在IE中的兼容性问题:
在IE的某些低版本中,不支持opacity属性,需要单独处理,解决方案如下:

    div {
        opacity: 0.4;
        filter: alpha(opacity: 40);
    }

三、动画:

1、缓动动画:

1、缓动公式:

var begin = 0, end = 500;
begin += (end-begin)*0.1;

2、缓动动画:

setInterval(function () {
  begin += (end-begin)*0.1;
  element.style.xxx = begin + "px";  //这里的xxx可以设置为element元素的某个属性,或者是其他的代码
 }, 10);

四、函数:

1、监听页面加载完毕

1.1、window.onload方法:
onload方法会等DOM元素加载完毕,并且还会等到资源也加载完毕才会执行,在性能上会有些低

1.2、DOMContentLoaded事件:
只会等到DOM元素加载完毕就会执行回调,会比onload方法更快

        document.addEventListener("DOMContentLoaded", function () {
            //DOM元素加载完毕
        });

注意:
addEventListener在IE8及以下并不支持,可以使用attachEvent方法进行替换,但是其中并没有DOMContentLoaded 这个事件,所以,需要使用其他的事件来替换,
document.readyState属性中有如下状态:
uninitialized : 还未开始载入
loading : 载入中
interactive : 已加载,文档于用户可以开始交互
complete : 载入完成

onreadystatechange 事件就是专门用于监听document.readyState 属性的改变的,即上面的状态有改变的时候,都会调用此事件。

        document.attachEvent("onreadystatechange", function () {
            //onreadystatechange,状态改变
            if (document.readyState==="complete") {
                //加载完毕
            }
        });

1、cloneNode方法注意点:

在原生js中,cloneNode 方法仅仅是浅复制,也就是说,只会复制元素的属性,并不会拷贝其方法。

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>clone方法</title>

    <script>
        window.onload = function () {
            var ul = document.getElementById("ul");
            var li = document.getElementById("li1");
            li.onclick = function() {
                alert(this.innerText);
            };

            //浅复制
            document.getElementById("btn1").onclick = function() {
                var nLi = li.cloneNode(true);
                ul.append(nLi);
            };

            //深复制
            document.getElementById("btn2").onclick = function() {
                var nLi = li.cloneNode(true);
                for (var name in li) {
                    if (name.indexOf("on")===0) {
                        nLi[name] = li[name];
                    }
                }
                ul.append(nLi);
            };
        };

    </script>
</head>
<body>
<button id="btn1">浅复制</button>
<button id="btn2">深复制</button>
<ul id="ul">
    <li id="li1">我是第一个li</li>
</ul>

</body>
</html>
被拷贝的元素 浅拷贝的元素 深拷贝的元素

相关文章

  • <JavaScript>总结:注意点

    一、事件 1、a标签中点击事件 1、描述示例: 2、现象需求:当点击了a标签之后,会跳转到相应的图片展示页面。 如...

  • <JavaScript>总结:知识点

    一、网页中的相关属性和参数使用: 1、获取的当前网页的路径: 2、获取网页的域名: 3、hash:需求:如果页面中...

  • <jQuery>总结:注意点

    一、函数方法 1、静态函数的使用 1、jQuery中的each静态方法和mao静态方法的区别 1.1 返回值的不同...

  • <ES6>总结:注意点

    一、新增数据类型 1、Map: 1.1、map存储的注意点: Map中可以存储任意类型的key(键),只有当存储的...

  • <Vue2.x>总结:注意点

    一、组件间通信 1、多层组件间通信的命名问题 1.1、问题 在使用多层组件间通信的时候,经过反复测试,发现创建的组...

  • <<你不知道的JavaScript>>之

    前奏 读完书中的“关于this”这一章,发现其实作者有点啰嗦的感觉了。他并没有直接讲this到底是什么,只是列举了...

  • React注意点总结

    最初使用React时,没有太注意细节,只是会使用,实现功能,当使用一段时间再回过头来看官方文档时发现有些东西原来是...

  • jquery 选择器

    jQuery层级选择器 基本筛选选择器 注意事项: :eq(), :lt(), :gt(), :even, :od...

  • Read a story

    This is a lion. lt's big. lt's strong. lt has big teeth. ...

  • jQuery选择器之基本筛选选择器

    注意事项: :eq(), :lt(), :gt(), :even, :odd 用来筛选他们前面的匹配表达式的集合元...

网友评论

      本文标题:<JavaScript>总结:注意点

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