• JavaScript学习(一)—处理事件2


    下面的表中为最常用的 12 种 JavaScript 事件处理程序。

    我的随笔 - 我的前端之路 - 博客园

    一.处理窗口事件(onload事件,onunload事件,onresize事件,onmove事件,onabort事件,onerror事件,onfocus事件,onblur事件)

    当用户执行某些会影响整个浏览器窗口的操作时,就会发生窗口事件。

    最常见的窗口事件:

    1.通过打开某个网页来加载窗口

    2.在窗口关闭、移动或转到后台时触发事件处理程序的事件

    如下所示:

    window.onfocus

    window.onload

    document.onmousedown

    注意:

    1.像这样将事件处理程序作为对象的一部分使用时,事件处理程序的名称是全小写的。

    2.更符合标准的做法是,将事件处理程序放在外部脚本而不是HTML 标签中

    1.1 加载事件(onload)

    当用户进入页面而且所有页面元素都完成加载时,就会触发这个事件

    支持该事件的 HTML 标签

    <body>, <frame>, <frameset>, <iframe>, <img>, <link>, <script>

    支持该事件的 JavaScript 对象

    window, image, layer

    注意:1加载页面时,触发onload事件,事件写在<body>标签内。

    <body onload="test()">

    例1:在页面载入完成时,执行自定义的函数,弹出对话框“加载中,请稍等…”。

    我的随笔 - 我的前端之路 - 博客园

    运行结果:

    我的随笔 - 我的前端之路 - 博客园

    例2:演示了在图像载入完成时,提示加载的图像名称:

    <!DOCTYPE html>
    <html>
    <head>
    <script type="text/javascript">
    function load(x){
        var s=x.src;
    alert( "加载的图像为:" + s.substring(s.lastIndexOf("/")+1) );
    // s.lastIndexOf("/")+1 返回指定的字符串值最后出现的位置,s.substring(n) 返回从此处位置的子串一直到字符串对象的结束,所以此处是图像位置的图像名称
    }
    </script>
    </head>
    <body>
    <img src="https://www.baidu.com/img/bd_logo1.png" onload="load(this)" />
    </body>
    </html>

    结果:图片加载完毕后弹出

    我的随笔 - 我的前端之路 - 博客园

    延伸:

    1.JavaScript lastIndexOf() 方法(出自w3school)

    定义和用法

    lastIndexOf() 方法可返回一个,在一个字符串中的指定位置从后向前搜索。

    语法

    stringObject.lastIndexOf(searchvalue,fromindex)
    我的随笔 - 我的前端之路 - 博客园
    返回值:
    1.如果在 stringObject 中的 fromindex 位置之前存在 searchvalue,则返回的是出现的最后一个 searchvalue 的位置。
    说明:
    1.该方法将从尾到头地检索字符串 stringObject,看它是否含有子串 searchvalue。
    2.开始检索的位置在字符串的 fromindex 处或字符串的结尾(没有指定 fromindex 时)。
    3.如果找到一个
    searchvalue,则返回 searchvalue 的第一个字符在 stringObject 中的位置。stringObject 中的字符位置是从 0 开始的。
    提示和注释:
    注释:lastIndexOf() 方法对大小写敏感!
    注释:如果要检索的字符串值没有出现,则该方法返回 -1。
    实例
    在本例中,我们将在 "Hello world!" 字符串内进行不同的检索:
    <script type="text/javascript">
    var str="Hello world!"
    document.write(str.lastIndexOf("Hello") + "<br />")
    document.write(str.lastIndexOf("World") + "<br />")
    document.write(str.lastIndexOf("world"))
    </script>

    以上代码的输出:

    0
    -1
    6

    2.返回指定的字符串首次出现的位置

    indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

    语法

    stringObject.indexOf(substring, startpos)

    参数说明:

    我的随笔 - 我的前端之路 - 博客园

     

    说明:

    1.该方法将从头到尾地检索字符串 stringObject,看它是否含有子串 substring。

    2.可选参数,从stringObject的startpos位置开始查找substring,如果没有此参数将从stringObject的开始位置查找。

    3.如果找到一个 substring,则返回 substring 的第一次出现的位置。stringObject 中的字符位置是从 0 开始的。

    注意:1.indexOf() 方法区分大小写。

       2.如果要检索的字符串值没有出现,则该方法返回 -1。

    例如: 对 "I love JavaScript!" 字符串内进行不同的检索:

    <script type="text/javascript">
      var str="I love JavaScript!"
      document.write(str.indexOf("I") + "<br />");
      document.write(str.indexOf("v") + "<br />");
      document.write(str.indexOf("v",8));  //从第八个开始检索,
    </script>

    以上代码的输出:

    0

    4

    9

    任务

    使用indexOf()方法,检索第二个字符o出现的位置。

    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>string对象 </title>
    <script type="text/javascript">
      var mystr="Hello World!"
      document.write(mystr.indexOf("o",5));
    </script>
    </head>
    <body>
    </body>
    </html>
    另:
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>string对象 </title>
    <script type="text/javascript">
      var mystr="Hello World!"
      document.write(mystr.indexOf("o",mystr.indexOf('o')+1));
    </script>
    </head>
    <body>
    </body>
    </html>

    因为我的随笔 - 我的前端之路 - 博客园

    所以要写成mystr.indexOf('o')+1

    3.提取字符串substring()

    substring() 方法用于提取字符串中介于两个指定下标之间的字符。

    语法:

    stringObject.substring(starPos,stopPos) 

    参数说明:

    我的随笔 - 我的前端之路 - 博客园

     

    注意:

    1. 返回的内容是从 start开始(包含start位置的字符)到 stop-1 处的所有字符,其长度为 stop 减start。

    2. 如果参数 start 与 stop 相等,那么该方法返回的就是一个空串(即长度为 0 的字符串)。

    3. 如果 start 比 stop 大,那么该方法在提取子串之前会先交换这两个参数。

    使用 substring() 从字符串中提取字符串,代码如下:

    <script type="text/javascript">
      var mystr="I love JavaScript";
      document.write(mystr.substring(7));
      document.write(mystr.substring(2,6));
    </script>

    运行结果:

    JavaScript

    love

    任务

    运用substring()方法,完成子字符串的提取:
    1.从字符对象mystr中提取World!子字符串。

    2.从字符对象mystr中提取Hello子字符串。

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>string对象</title>
    <script type="text/javascript">
    var mystr="Hello World!"
    document.write(mystr.substring(6) + "<br />");
    document.write(mystr.substring(0,5)+ "<br />"               );
    </script>
    </head>
    <body>
    </body>
    </html>

    另:

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>string对象</title>
    <script type="text/javascript">
    var mystr="Hello World!"
    document.write(mystr.substring(mystr.indexOf("W")) + "<br/>");
    document.write(mystr.substring(mystr.indexOf("W"),mystr.length)+"<br />");
    document.write(mystr.substring(mystr.indexOf(' '))+ "<br />");
    document.write(mystr.substring(mystr.lastIndexOf("W")) + "<br/>");
    document.write(mystr.substring(0,mystr.indexOf(' ')+"<br />"));
    
    
    document.write(mystr.substring(0,mystr.indexOf("o")+1)+ "<br/>"               );
    document.write(mystr.substring(mystr.indexOf("H"),mystr.indexOf("W")-1)+"<br />");
    </script>
    </head>
    <body>
    </body>
    </html>

    应用例子:

    1.检测浏览器宽度屏幕分辨率之后,调整页面的相应尺寸

    延伸:1.Web环境中屏幕、浏览器及页面的高度、宽度信息(参考资料:HTML 获取屏幕、浏览器、页面的高度宽度图解js中常用的判断浏览器窗体、用户屏幕可视区域大小位置的方法

    .屏幕信息

     

    screen.height 屏幕高度

    screen.availHeight 屏幕可用高度。即屏幕高度减去上下任务栏后的高度,可表示为软件最大化时的高度。

    screen.width 屏幕宽度。

    screen.availWidth 屏幕可用宽度。即屏幕宽度减去左右任务栏后的宽度,可表示为软件最大化时的宽度。

    任务栏高/宽度可通过屏幕高/宽度 减去 屏幕可用高/宽度得出。如:任务栏高度 = screen.height - screen.availHeight 。

    .浏览器信息

     

    window.outerHeight 浏览器高度。

    window.outerWidth 浏览器宽度。

    window.innerHeight 浏览器内页面可用高度;此高度包含了水平滚动条的高度(若存在)。可表示为浏览器当前高度去除浏览器边框、工具条后的高度。

    window.innerWidth 浏览器内页面可用宽度;此宽度包含了垂直滚动条的宽度(若存在)。可表示为浏览器当前宽度去除浏览器边框后的宽度。

    工具栏高/宽度包含了地址栏、书签栏、浏览器边框等范围。如:高度,可通过浏览器高度 - 页面可用高度得出,即:window.outerHeight - window.innerHeight。

    .页面信息

     

    body.offsetHeight body总高度。

    body.offsetWidth body总宽度。

    body.clientHeight body展示的高度;表示body在浏览器内显示的区域高度。

    body.clientWidth body展示的宽度;表示body在浏览器内显示的区域宽度。

    滚动条高度/宽度如高度,可通过浏览器内页面可用高度 - body展示高度得出,即window.innerHeight - body.clientHeight。

    .展示图

     

    五. document.documentElement.scrollWidth 和 document.documentElement.scrollHeight 

    document.documentElement.scrollWidth 和 document.documentElement.scrollHeight 是整个网页大大小,包括可视区域和被卷起来的区域,网页整体就是了(在这例子里我们是设置div宽高分别为2000px和1800px的):

    六. document.body.scrollTop 和 document.body.scrollLeft

    document.body.scrollTop 和 document.body.scrollLeft 是整个网页的上方或者左边被卷起来的部分(注意这里中间部分是body而不再是documentElement):

    有人问,那我要获取网页被卷起来的下部分或者右部分怎么办?

    答案很简单,比如你要得到网页被卷起来的下部分,就用整个网页的高document.documentElement.scrollHeight减去网页上方被卷起来的部分document.body.scrollTop,再减去当前浏览器视图区域高度document.documentElement.clientHeight即可

    2.加载后JS自动等比例缩放图片大小

    按条件来判断是这样的:
    if(初始比例 > 预览比例) {
      if (image.width > FitWidth) {
       }
    else { } } else { if (image.height > FitHeight) {   } else { } }

    原理:

    1.首先:比较图片的缩放比例:

    如:图片的原始尺寸比例:650/313=2.07

    现在图片尺寸比例:500/313=1.5

    2. 保持原始尺寸比例不变,比较尺寸比例,图片的原始尺寸比例大于现在图片尺寸比例,则比较他们的宽度,选择较小的宽度

    3. 图片的原始尺寸比例小于现在图片尺寸比例,则比较他们的高度,选择较小的高度

    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title></title> 
    </head> 
    <body> 
    <script language="javascript"> 
    var flag=false; //定义一个标志
    function DrawImage(img1,FitWidth,FitHeight){ //第一个参数是当前对象this,第二个是宽,第三个是高
        var image=new Image(); //创建一个Image对象,实现图片的预下载:var a=new Image();或 var a = new Image(<图片地址字符串>);  
        image.src=img1.src; //定义Image对象的src: a.src=”xxx.gif”;将图片的src属性赋值给新建图片对象的src ,这样做就相当于给浏览器缓存了一张图片, 。        
        if (image.width > 0 && image.height > 0) {
            flag=true; 
            if (image.width / image.height >= FitWidth / FitHeight) {//选择较小的宽度,图片比例为image.width / image.height,540/258大于  500/258
                if (image.width > FitWidth) {  // 选择较小的宽度,图片比例为image.width / image.height
                    img1.width = FitWidth;      // 所以宽为FitWidth=500  
                    img1.height = (image.height * FitWidth) / image.width; // 所以高为(image.height * FitWidth) / image.width=(258*500)/540=238
                } else {                         // 选择较小的宽度,图片比例为image.width / image.height
                    img1.width = image.width;    // 所以宽为image.width,缩放比例image.width / image.height
                    img1.height = image.height;  //所以高为(image.height * image.width) / image.width= image.height
                }
            } else {    //选择较小的高度,图片比例为image.width / image.height
                if (image.height > FitHeight) {  // 选择较小的高度,图片比例为image.width / image.height
                    img1.height = FitHeight;     // 所以高为FitHeight,缩放比例image.width / image.height
                    img1.width = (image.width * FitHeight) / image.height;   //所以宽为(image.width *FitHeight) /image.height
                } else {                        // 选择较小的高度,图片比例为image.width / image.height
                    img1.height = image.height;    // 所以高为image.height,缩放比例image.width / image.height
                    img1.width = image.width;   //所以宽为(image.width *image.height) /image.height=image.width
                }
            }
        }
    }
    </script> 
    <img src="https://www.baidu.com/img/bd_logo1.png" border="0" onload="DrawImage(this, 500, 258);"> 
    </body> 
    </html> 

    知识点备注:

    建立图像对象:图像对象名称=new Image([宽度],[高度])

    需要注意的是:src 属性一定要写到 onload 的后面,否则程序在 IE 中会出错。(在 FF 中,img 对象的加载包含在 body 的加载过程中,既是 img加载完之后,body 才算是加载完毕,触发 window.onload 事件。在 IE 中,img 对象的加载是不包含在 body 的加载过程之中的,body 加载完毕,window.onload 事件触发时,img对象可能还未加载结束,img.onload事件会在 window.onload 之后触发。

    可以通过Image对象的complete 属性来检测图像是否加载完成(每个Image对象都有一complete属性,当图像处于装载过程中时,该属性值false,当发生了onload、onerror、onabort中任何一个事件后,则表示图像装载过程结束(不管成没成功),此时complete属性为true),这点会在后文讲到

    2.流行的广告弹出窗口就是使用onload 事件处理程序的典型例子。

    3. img元素默认不显示,通过onload判断加载完成后再将图片显示出来(作者: 品味人生

    <img class="pic1" onload="get(this)" src="..." style='display:none' />
    
    <script type="text/javascript">
    function get(ts){
        ts.style.display = 'block';  //显示图片
    }
    </script>

    优点:可以将javascript代码部分放置于页面的任何部分加载,并且可以用于多数任意图片上。使用比较简单,易理解。

    缺点:必须在每个标签上都贴上onlaod属性,在某些无法直接操作HTML代码,或者需要代码精简的情况下不适用

    javascipt原生方法

    选取指定ID的图片,通过onload指定回调方法,在图片加载完成后弹出“图片加载已完成”字样提示。

    <img id="pic1" src="..." />
    
    <script language="JavaScript">
        document.getElementById("pic1").onload = function () {
            alert("图片加载已完成");
        }
    </script>

    优点:简单易用,不影响HTML代码。

    缺点:只能指定一个元素,javascipt代码必须置于图片元素的下方

    jquery方法

    为每个class为pic1的图片元素绑定事件,通过jquery的load方法,将元素渐现出来。

    注意,不要在$(document).ready()里绑定load事件。

    <script type="text/javascript">
    $(function(){
        $('.pic1').each(function() {
            $(this).load(function(){
                $(this).fadeIn();
            });
        });
    })
    </script>

    优点:可以批量绑定元素事件,并且不影响HTML代码内容

    4. 图片加载时显示边框,加载完毕去掉

    <!DOCTYPE html>
    <html>
    <head>
    <style>
    img{
        border:2px solid #555;
    }
    </style>
    <script type="text/javascript">
    function takeBorder(obj){
                obj.style.borderWidth = 0;
            }
    </script>
    </head>
    <body>
    <img src="https://www.baidu.com/img/bd_logo1.png" onload="takeBorder(this)">
    </html>

    我的随笔 - 我的前端之路 - 博客园

    5.使用预加载获取图片大小

    6. JavaScript判断图片是否加载完成

    注意:本文为原创,转载请以链接形式标明本文地址 ,谢谢合作。

    本文地址:http://www.cnblogs.com/wanghuih/p/5614192.htm

  • 相关阅读:
    Servlet中文件上传
    Servlet 返回Json数据格式
    Java通用oracle和mysql数据库连接
    JAVA JDBC
    Thread suspend()挂起resume()恢复
    Thread 线程池
    阿里巴巴开源框架java诊断工具--Arthas
    B Tree
    MySQL--高性能MySQL笔记二
    MySQL--高性能MySQL笔记一
  • 原文地址:https://www.cnblogs.com/wanghuih/p/5614192.html
Copyright © 2020-2023  润新知