JavaScript学习第十七天

DOM事件对象

事件自带的属性,包含事件相关的一些属性

键盘事件对象
html代码

    <input type="text">
1
altkey、actrlkey、shiftkey 判断这些键是否被按下

matekey 判断matekey键是否被按下(针对mac系统)

code 返回键盘代码

keycode 返回按键的字符代码(针对Ie8以下的浏览器)

which 返回按键的字符代码

target 返回时间作用的目标元素

bubbles 返回是否具有冒泡属性

cancelbubble 是否阻止事件冒泡

type 返回事件类型

js代码

  var ipt = document.getElementsByTagName('input')[0];
       // document.onkeydown = function(e){
       //     e=e||window.event;  // 解决兼容性问题
           // console.log(e);
           // console.log(e.altKey);
           // console.log(e.shiftKey);
           // console.log(e.ctrlKey);
           // console.log(e.code);
           // console.log(e.keyCode);
           // console.log(e.which);
           // console.log(e.target);
       // }
       ipt.onkeydown=function(e){
           e=e||window.event;
           // console.log(e.target);
           // console.log(e.code);
           // console.log(e.keyCode);
           console.log(e.bubbles);
           console.log(e.cancelBubble);
       }

鼠标事件对象

altkey、shiftkey、ctrlkey、metakey(mac系统)对于鼠标事件依然可以使用
target 返回时间作用的目标元素
bubbles 返回是否具有冒泡属性
cancelbubble 是否阻止事件冒泡
type 返回事件类型
button、buttons返回按键的编码
which 返回按下的按键的编码(对应左中右)
鼠标指针的坐标

clientX 相对于可视区域的x轴坐标
clientY 相对于可视区域的y轴坐标
pageX 相对于整个网页区域的x轴坐标,滚动条对其产生影响
pageY 相对于整个网页区域的y轴坐标,滚动条对其产生影响
offsetX 相对于元素自身的x轴坐标
offsetY 相对于元素自身的y轴坐标
layerX 值与clientX相同
layerY 值与clientY相同
screenX 相对于电脑屏幕的x轴坐标
screenY 相对于电脑屏幕的y轴坐标
html代码
    <input type="text">

1
2
js代码

 var ipt = document.getElementsByTagName('input')[0];

        // document.onclick = function(e){
            // e=e||window.event;
            // console.log(e.which);
            // console.log(e.target);
            // console.log(e.type);
            // console.log(e.altKey);
            // console.log(e.clientY,e.clientX);
            // console.log(e.offsetY,e.offsetX);
        // }
        ipt.onclick = function(e){
            e=e||window.event;
            // console.log(e.target);
            // e.cancelBubble = true;
            // console.log(e.bubbles);
            // console.log(e.cancelBubble);
            // console.log(e.button);
            console.log(e.clientY,e.clientX);
            console.log(e.offsetY,e.offsetX);
        }

鼠标事件对象的运用

那么学完鼠标事件对象之后,我们进行了相应的练习,完成了一个鼠标拖拽的案例。现在我来进行一下复盘:

首先分析要求,鼠标按下能够让一个元素跟随移动,鼠标松开元素会停止移动。
那么我们首先要使用onmousedown(鼠标按下)事件配合onmousemove(鼠标移动)事件,获得鼠标的坐标,把坐标的值传给元素的位置,完成鼠标按下让元素跟随移动
接着再使用onmouseup(鼠标松开)事件配合onmousemove(鼠标移动)事件,完成鼠标松开时,元素停止移动。
总体的思路不算复杂,但是其中还有一些需要注意的地方,就是我们要使用offsetX、offsetY让控制鼠标在图片上的哪个位置按下时就能保证在哪个位置上,如果不进行这个操作,那么无论鼠标在哪个位置按下后,都会立刻跳转到左上角

html代码
    <div id="box"></div>

css代码
body{
            height: 1000px;
        }
        *{
            margin: 0;
            padding: 0;
        }
        #box {
            width: 50px;
            height: 50px;
            background-color: aqua;
            position: absolute;
        }

js代码
var oBox = document.getElementById('box');
    var x, y;

    oBox.onmousedown = function (e) {
        var a = e.offsetX;
        var b = e.offsetY;
        document.onmousemove = function (f) {
            x = f.pageX;
            y = f.pageY;
            oBox.style.left = x-a + 'px';
            oBox.style.top = y-b + 'px';

        }
    }
    document.onmouseup = function (ev) {
        document.onmousemove = function () {
            // return false
        }}

css补充内容

伪元素
::before 插入到子元素的最前面
::after 插入到子元素的最后面
注意它们都是行标签,是不用在html代码中添加的,可以直接在css中进行编写,content是这两个元素必需的属性
我们可以用它们去清除浮动,以及实现对选择框的样式的控制
清除浮动
清除浮动我们要用到::after伪元素
html代码

 <div id="box1">11</div>
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>

css代码

*{
            margin: 0;
            padding: 0;
            list-style: none;
        }
        #box1,#box2{
            width: 150px;
            height: 150px;
            background-color: antiquewhite;
            text-align: center;
            line-height: 150px;
        }
        ul>li{
            width: 50px;
            height: 50px;
            float: left;
            background-color: chartreuse;
            margin: 10px;
        }
        /* 清除浮动 */
        ul::after{
            content: '';
            display: block;
            clear: both;
        }

控制选择框的样式

控制选择框的样式我们需要用到::before伪元素和content属性
html代码

<input type="checkbox" id="basketBall">
    <label for="basketBall" draggable="false">打篮球</label>
    <input type="checkbox" id="footBall">
    <label for="footBall" draggable="false">踢足球</label>

css代码

/* 清除掉选择框原有的样式 */
        input{
            display: none;
        }
        /* 让用户不能选中复制文字 */
        label{
            user-select: none;
        }
        label::before{
            /* content里面可以用字符代码,也可以使用url(图片地址) */
            content: '\2720';
            display: inline-block;
            width: 16px;
            height: 16px;
            border-radius: 50%;
            line-height: 16px;
            text-align: center;
            border: 1px solid;
            border-color: aqua;
            vertical-align: middle;
        }
        /* :checked属性表示当元素被选中时  '+'号表示下一个兄弟元素 */
        input:checked+label::before{
            content:'\262F';
            background-color: aqua;
            color: white;
            overflow: hidden;
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值