第3章 BOM(3课时)

BOM:浏览器对象模型(BrowserObjectModel)

目标

  • 使用window对象(打开新窗口、与用户交互、定时器)
  • 使用document对象
  • 其他对象(线上)

浏览器对象模型

image.png

window

http://www.w3school.com.cn/jsref/met_win_open.asp

打开新窗口(线上)

window.open(URL,name,features,replace)

URL:地址
name:窗口名称
features:新窗口要显示的标准浏览器的特征
replace:一个可选的布尔值。规定了装载到窗口的 URL 是在窗口的浏览历史中创建一个新条目,还是替换浏览历史中的当前条目。支持下面的值:

true - URL 替换浏览历史中的当前条目。
false - URL 在浏览历史中创建新的条目。

简单例子

<script type="text/javascript">
function open_win() 
{
window.open("http://www.w3school.com.cn")
}
</script>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            var w;
            function newWindow(){
                //window.open("https://www.jianshu.com/p/c1c0755d2645");
                w=window.open("https://www.baidu.com",'mywindow','width=600,height=400');
                //window.open("https://www.jianshu.com/p/c1c0755d2645",'','width=600,height=400');
                //w.moveTo(300,300);
                //w.resizeTo(800,600);
                //w.focus;
            }
            function closeWindow(){
            w.close()
            }
        </script>
        
    </head>
    <body>
        <a href="javascript:newWindow()"> new page</a>
        <a href="javascript:closeWindow()"> close page</a>
    </body>
</html>

<input type=button value="Open Window" onclick="open_win()" />

打开一个窗口,打印一行文字,并获取焦点
<script type="text/javascript">
myWindow=window.open('','','width=200,height=100')
myWindow.document.write("This is 'myWindow'")
myWindow.focus()
</script>

打开一个窗口,显示图片,指定宽高
<a href="javascript:newWindow()"> new page</a>

 <script>
    function newWindow() {
        var win=open("../../images/1.jpg","mywindow","width=1250,height=500");
    }
</script>

窗口其他方法

https://www.w3school.com.cn/jsref/dom_obj_window.asp

moveTo(x,y)

方法格式:window.moveTo(x,y);
功能:将窗口移动到指定坐标(x,y)处;

resizeTo(x,y)

方法格式:window.resizeTo(x,y);
功能:将当前窗口放大或缩小到(x,y)指定大小,x、y分别为宽度和高度;

resizeBy(x,y)

方法格式:window.resizeBy(x,y);
功能:要使窗口宽度放大或缩小的像素数。可以是正、负数值。
将当前窗口改变到指定的大小(x,y),当x、y的值大于0时为扩大,小于0时为缩小。

moveBy(x,y)

功能:相对窗口的当前坐标把它移动指定的像素。

.focus .blur ## 得到或失去焦点

<script>
function newWindow() {
var win=open("../../images/1.jpg","mywindow","width=200,height=200");
win.moveTo(300,0);
win.resizeTo(500,500);
win.resizeBy(200,50);
//win.focus();
}
</script>

window.close()

function closeWin()
{
myWindow.close()
}

测试窗口失去和获取焦点

哪个窗口获取焦点,哪个就在前面,另外一个被挡住

<head>
    <meta charset="utf-8">
    <title></title>
    <script type="text/javascript">
        
        function newWindow() {
        var win=open("18-正则表单验证-day03.html","mywindow","width=300,height=300");
         win.moveTo(300,0);//移动到绝对位置300,0
         win.moveBy(0,200);//相对于刚才的300,0再移动0,200  (300,200)
         win.resizeTo(400,400);
         win.resizeBy(200,50);
        win2.focus();
         
         var win2=open("images/pic1.jpg","mywindow","width=300,height=300");
          win2.moveTo(300,0);//移动到绝对位置300,0
          win2.moveBy(0,200);//相对于刚才的300,0再移动0,200  (300,200)
          win2.resizeTo(400,400);
          win2.resizeBy(200,50);
          //win2.focus();
        }
        
    </script>
</head>
<body>
    <input type="button" name="btn1" id="" value="打开" onclick="newWindow();" />
</body>

与用户交互(线上)

js中的三种消息对话框分别是alert(),confirm(),prompt()

1、alert():警告窗口
有一个确认按钮。

①写在<script>标签中

②括号中的内容为字符串或者整型

③点击确认即可关闭,无返回值
window.alert(“欢迎!请按“确定”继续。”),

2、confirm():确认对话框,返回true/false,
有确认和取消两个按钮

①写在<script>标签中

②括号中的内容为字符串和整型

③点击确认返回true,点击取消返回false

<script type="text/javascript">
function disp_confirm()
  {
  var r=confirm("确认删除吗")
  if (r==true)
{
document.write("You pressed OK!")
}
  else
{
document.write("You pressed Cancel!")
}
  }
</script>
<input type="button" onclick="disp_confirm()"
value="Display a confirm box" />

3、prompt(?,?):弹出消息对话框
prompt弹出消息对话框,通常用于询问一些需要与用户交互的信息。弹出消息对话框(包含一个确定按钮、取消按钮与一个文本输入框)。

①写在<script>标签中

②str1: 要显示在消息对话框中的文本(提示语),不可修改
str2:默认值 。文本框中的内容,可以修改

③点击确认返回输入框中的内容,取消返回null

var myname=prompt("请输入你的姓名:");
if(myname!=null)
  {   alert("你好"+myname); }
else
  {  alert("你好 my friend.");  

其他例子

<script>
alert("hello啊");
var result=confirm("您确认要删除吗");
if(result){
alert("已删除");
}else{
alert("已取消");
}
//接受用户输入
var name=prompt("请输入您的姓名","");
document.write(name);
</script>

定时器(掌握)

setTimeout(执行的js,毫秒)
setInterval(执行的js,毫秒)

函数名加不加小括号的区别:
1、加小括号表示把函数的返回值传给他
2、不加小括号是把函数本身传给他。

两者区别setTimeout 延迟几毫秒执行一次js
setInterval 每间隔一定毫秒数执行一段js
clearInterval(名字);清除定时器
clearTimout(名字);
写法:

<script>
var t=setTimeout("alert(new Date())",5000);
</script>
<script>
var t=setInterval("alert(new Date())",1000);
</script>

学生练习

把上一章做的时钟改为每秒刷新的,可以控制启动和停止

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            var time01 = null;
            function time() {
                //获取div ,在div里打印当前时间
                var timeDiv = document.getElementById("timeDiv");
                //获取当前时间
                var date = new Date();
                //星期天是0 星期1-6即是1-6
                var day_arry = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
                //计算当前时间是星期几
                var day = date.getDay();
                var day_str = day_arry[day];
                //打印时间yyyy年MM月dd日 hh:mm:ss
                timeDiv.innerHTML = date.getFullYear() + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日 " + date.getHours() +
                    ":" + date.getMinutes() + ":" + date.getSeconds() + day_str;
            }
            //只执行一次的定时器  
            //第一个参数是需要执行的js,第二个参数是延迟多少毫秒
            //setTimeout(time, 5000);
            function start() {
                //每间隔1秒执行一次的定时器
                time01 = setInterval(time, 1000);
            }

            function stop() {
                clearInterval(time01);
            }
            //解决打印叠加的问题
        </script>
    </head>
    <body>
        <div id="timeDiv">
        </div>
        <input type="button" value="启动" onclick="start();" />
        <input type="button" value="停止" onclick="stop();" />
    </body>
</html>

document对象

https://www.w3school.com.cn/jsref/dom_obj_document.asp
获取元素的方式

通过document获取

getElementById()

通过id获取 结果为对象类型 可以直接用变量接收

getElementsByName()

通过name获取 结果为数组

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            function getElements() {
                //通过name获取元素集合
                //document.getElementById("id"); 适合一次获取一个
                //下面这三个是一次可获取多个 
                //通过name
                //var inputs = document.getElementsByName("myInput");
                //通过标签名获取
                //var inputs = document.getElementsByTagName("input");
                //通过标类名获取
                var inputs = document.getElementsByClassName("class1");
                //alert(inputs.length);
                for(var i=0;i<inputs.length;i++){
                    alert(inputs[i].value+"<br>");
                }
            }
        </script>
    </head>
    <body>
        <input name="myInput" type="text" size="20" class="class1"/><br />
        <input name="myInput" type="text" size="20" class="class1"/><br />
        <input name="myInput" type="text" size="20" class="class1"/><br />
        <br />
        <input type="button" onclick="getElements()" value="How many elements named 'myInput'?" />
    </body>
</html>


  <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function check() {
//通过id获取元素
var name = document.getElementById("username");
alert("用户输入的值是:" + name.value);
var hobbys = document.getElementsByName("hobby");
for (var i = 0; i < hobbys.length; i++) {
//如果是多选框,我需要判断是否被用户选中
if (hobbys[i].checked) {
alert(hobbys[i].value);
}
}
//不常用
   var inputs=document.getElementsByTagName("input");
   alert(inputs);
 }
</script>
</head>
<body>
<form onsubmit="return check()">
<input type="text" id="username"/><br>
爱好<input type="checkbox" name="hobby" value="1">真香
<input type="checkbox" name="hobby" value="2">呵呵
<input type="checkbox" name="hobby" value="3">打豆豆
<input type="submit"/>
</form>
</body>
</html>

getElementsByTagName()

通过标签名获取 结果为数组

innerHtml innerText区别
innerHtml解析并显示成html形式
innerText按文本方式显示

通过集合方法

document.images[0]
document.images["img2"]

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
function getImgName() {
alert("aa");
//通过images
   var images= document.images;
  /* for(var i=0;i<images.length;i++){
   alert("图片名:"+images[i].src);
   }*/
  images[0].src="../../images/2.jpg";
  document.images["img2"].src="../../images/1.jpg";
   //换图片
}
</script>
</head>
<body>
<form>
<input type="button" name="btn1" onclick="getImgName()" value="换图"/>
<img src="../../images/1.jpg" name="img1" height="200" width="200"/>
<img src="../../images/2.jpg" name="img2" height="200" width="200"/>
</form>

</body>
</html>

通过name属性方法

document.images.img2
document.img2

轮播图

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            function changeImg(){
                //第一种保留,第2-4种了解
                //第一种方式通过下标访问
                //document.images[1].src="../images/04.jpg";
                //第二种可以通过名字访问
                //document.images["img02"].src="../images/04.jpg";
                //第三种可以通过名字访问
                //document.images.img02.src="../images/04.jpg";
                //第四种可以不借助images,直接通过document.名字访问
                //document.img02.src="../images/04.jpg";
                //01 02 03 04 随机切换
                //step-1 -生成1-4之间的随机数
                var i=1+Math.round(Math.random()*3);  //0-3之间的数+1---->1-4
                document.images[0].src="../images/0"+i+".jpg";
            }
            function start(){
                setInterval(changeImg,1000);
            }
        </script>
    </head>
    <body>
        <img name="img01" src="../images/01.jpg" width="300px" height="300px">
        <img name="img02" src="../images/02.jpg" >
        <img src="../images/03.jpg" >
        <img src="../images/04.jpg" >
    <input type="button" name="btn1" id="btn1" value="切换图" onclick="changeImg();"/>
    <input type="button" name="btn2" id="btn2" value="给我轮播" onclick="start();"/>
    </body>
</html>

作业:
第14页课堂练习
web前台练习题一套

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

推荐阅读更多精彩内容