首页 > 编程语言 >JavaScript事件

JavaScript事件

时间:2023-11-18 10:01:09浏览次数:40  
标签:function style JavaScript height 事件 var document

一、  JavaScript事件

在前端中,页面的每次交互和特效都是一个事件,其中任何一个html元素都是一个事件源,一个很事件源可以添加多个事件。

二、 事件中的event对象  

只要发生一个事件就会产生一个event事件,event代表事件的状态

1、event事件常见的属性和状态

2、阻止默认事件的发生

对于一些标签来说,他们拥有自己的事件,比如:a标签可以跳转,submit/button可以提交表单,reset可以重置按钮,那么如果想要给这些按钮添加事件,并且不让他执行对应的默认事件的话,就需要使用自制时间发生; 阻止默认事件的方法有两种:使用的是事件对象的方法来阻止event.stopPropagation();或者 return fales;

3、事件流-冒泡机制

事件的流向,是由两个机制,一个是事件的捕获 元素由外向内,另一个是元素的冒泡由内向外

注意:如果存在浏览器的兼容性问题可能会导致不同浏览器 出现冒泡程度不同

4、阻止冒泡的方法

 event.stopPropagation()

兼容性写法:

if(event && event.stopPropagation){  // w3c标准 
  event.stopPropagation(); 
}else{  // IE系列 IE 678 
  event.cancelBubble = true; 
}

“DOM事件流”:三个阶段:事件捕获,成为目标阶段,事件冒泡

三、 js触发事件的方式有哪些

1、在js获取元素/标签      元素.事件名称 = 匿名函数 / function(){}

2、元素.事件名称 = 函数名称

3、 在html中触发    onclick = "代码段 / 函数调用"

四、鼠标事件

五、键盘事件

想要区分键盘上的每个按键,是通过键盘的keyCode值来判断的,所以想要知道按下的是哪个按键,可以使用event.keyCode

document.onkeyup = function(){
    console.log(event.keyCode);
}

案例:控制小人移动

<style>
        .box {
            width: 30px;
            height: 30px;
            /* border: 1px solid red; */
            position: absolute;
            top: 0;
            left: 0;
        }
    </style>
</head>

<body>
    <div class="box">
        <img src="./img/ren_q_1.gif" alt="">
        <!-- <img src="./img/ren_q_2.gif" alt="">  -->
    </div>
var box = document.querySelector('.box')
        var img = document.querySelector('.box img');
        var flag = true;
        var left = 0;
        var tops = 0;
        var timer = null;

        function dong(walk) {
            flag = !flag;
            var imgname = flag ? `ren_${walk}_1.gif` : `ren_${walk}_2.gif`
            img.src = './img/' + imgname;
        }
        timer=setInterval(function () {
            dong('q');
        }, 200);
        clearInterval(timer)
        document.onkeydown = function () {
            switch (event.keyCode) {
                case 65:
                    left -= 10;
                    dong('l')
                    break;
                case 87:
                    tops -= 10;
                    dong('h')
                    break;
                case 68:
                    left += 10;
                    dong('r')
                    break;
                case 83:
                    tops += 10;
                    dong('q')
                    break;
            }
            box.style.left = `${left}px`;
            box.style.top = `${tops}px`;
        }

六、光标事件

案例: 小米官网搜索框

*{
            margin: 0;
            padding: 0;
                }
         input{
            width: 300px;
            height: 50px;
            outline: 0;
            border: 1px solid rgb(118, 118, 118);
            margin-left:100px ;
        }
        ul{
            width: 300px;
            height: 0px;
            border: 0px solid #ff6700;
            margin-left: 100px;
            overflow: hidden;
            
        }
        li{
            list-style: none;
            line-height: 50px;
            margin-left: 20px;
            color: #666;
        }
    </style>
</head>
<body>
    <input type="text" name="" id="inp">
    <ul id="ul">
        <li>小米家电</li>
        <li>小米手机</li>
        <li>红米手机</li>
        <li>小米电脑</li>
        <li>小米平板</li>
        <li>小米手表</li>
    </ul>
</body>
 var height = 0;
    var timer = null;
    inp.onfocus= function(){
        inp.style.border = '1px solid #ff6700';
        timer = setInterval(function(){
            if(height >=300){
                clearInterval(timer)
            }else{
                height+=10  
            ul.style.height = height+'px';
            ul.style.border = '1px solid #ff6700';
            }
            
        },20)
        

    }
    inp.onblur = function(){
        inp.style.border = '1px solid rgb(118, 118, 118)'; 
        ul.style.display = 'none'

    }

 七、窗口事件

八、表单事件

案例: 苏宁登录页面

当输入input框内时会出现×,点击取消内容,密码框出现小眼睛,点击睁开会实现密码框显示

<style>
        input{
            width: 300px;
            height: 50px;
            outline: 0;
            border: 0;
            border-bottom:1px solid #ccc  ;
            line-height: 50px;
            margin-left: 500px;
        }
        #inp1{
            margin-top: 100px;
        }
        span{
            display: none;
            cursor: pointer;
        }
        .imgs{
            position: absolute;
            margin-right: 100px;
            /* border: 1px solid red; */
            top: 180px;
            left: 750px;
            display: none;
        }
    </style>
</head>
<body>
    <input type="text" name="" id="inp1" placeholder="请输入手机号/用户名/邮箱"><span id="eorr">X</span><br>
    <input type="password" name="" id="inp2" placeholder="请输入密码"><img class="imgs" src="./xiaomi.img/yanjing_yincang_o.png" alt=""></span><span id="eorr2" >X</span>
 <script>
        var imgs = document.querySelector('.imgs')
       var flag  = true;

       //点击事件取消input的值
        eorr.onclick = function(){
            inp1.value = '';
        }
        eorr2.onclick = function(){
            inp2.value = '';
        }
        //input表单触发生成对应按键
        inp1.oninput = function(){
            if( inp1.value.length>0){
                eorr.style.display = 'inline-block';
            }else{
                eorr.style.display = 'none';
            }
        }
        inp2.oninput = function(){
            if( inp2.value.length>0){
                eorr2.style.display = 'inline-block';
                imgs.style.display = 'inline-block';
            }else{
                eorr2.style.display = 'none';
            }
        }
        //点击切换输入密码框
        imgs.addEventListener('click',function(){
           if(flag){
            imgs.src = `./xiaomi.img/yanjing.png`
            inp2.type = 'text'
            flag = !flag
           }else{
            imgs.src = `./xiaomi.img/yanjing_yincang_o.png`
            inp2.type = 'password'
            flag = !flag
           }
        })
    </script>

九、单选框和复选框被选中

案例:简易购物车案例

<table border='1' width="500">
        <tr>
            <td>选择</td>
            <td>商品名称</td>
            <td>商品数量</td>
            <td>商品价格</td>
            <td>总价</td>
        </tr>
        <tr>
            <td>
                <input type="checkbox" class="sel"/>
            </td>
            <td>上衣</td>
            <td>
                <button  class="jian">-</button>
                <span class="num">5</span>
                <button class="add">+</button>
            </td>
            <td class="price">100</td>
            <td class="prices"></td>
        </tr>
        <tr>
            <td><input type="checkbox" class="sel"/></td>
            <td>裤子</td>
            <td>
                <button  class="jian">-</button>
                <span class="num">2</span>
                <button class="add">+</button>
            </td>
            <td class="price">200</td>
            <td class="prices"></td>
        </tr>
        <tr>
            <td><input type="checkbox" class="sel"/></td>
            <td>包包</td>
            <td>
                <button class="jian">-</button>
                <span class="num">1</span>
                <button class="add">+</button>
            </td>
            <td class="price">300</td>
            <td class="prices"></td>
        </tr>
        <tr>
            <td>全选:<input type="checkbox" id="checkAll"/></td>
            <td colspan="4" id='totlePrice'>总价:0</td>
        </tr>
    </table>
 // 1. 获取所有的复选框
    var sel = document.querySelectorAll('.sel');
    var prices = document.querySelectorAll('.price');
    var onePrices = document.querySelectorAll('.prices');
    var nums = document.querySelectorAll('.num');
    var adds = document.querySelectorAll('.add');
    var jians = document.querySelectorAll('.jian');

    // 2. 给复选他添加事件
    for(var i=0;i<sel.length;i++){
        (function(i){
            sel[i].onclick = function(){
                allTotle();
                // console.log(sum);
            }
        })(i)
    }

    // 5. 计算商品总价
    function allTotle(){
        let sum = 0;
        // 3. 判断是否被选中
        for(let j=0;j<sel.length;j++){
            if(sel[j].checked){
                sum += parseFloat(onePrices[j].innerHTML)  
            }
        }
        totlePrice.innerHTML = `总价:${sum}`;
    }

    // 3. 单个商品的总价
    function totle(){
        for(var i=0;i<prices.length;i++){
            onePrices[i].innerHTML = prices[i].innerHTML*nums[i].innerHTML;
        }
    }

    // 4. 点击添加数量
    for(var i=0;i<adds.length;i++){
        adds[i].index = i;
        adds[i].onclick = function(){
            // this值得是被触发事件的元素本身
            nums[this.index].innerHTML = parseInt(nums[this.index].innerHTML) + 1;
            // 单个商品的总价重新计算
            totle();
            // 计算商品总价
            allTotle();
        }
    }
     // 4. 点击减少数量
     for(var i=0;i<jians.length;i++){
        jians[i].index = i;
        jians[i].onclick = function(){
            // this值得是被触发事件的元素本身
            nums[this.index].innerHTML = parseInt(nums[this.index].innerHTML) - 1;
            // 单个商品的总价重新计算
            totle();
            // 计算商品总价
            allTotle();
        }
    }

    // 页面加载进来之后调用
    totle();

    // 6. 全选
    checkAll.onclick = function(){
        console.log(checkAll.checked);
        for(let j=0;j<sel.length;j++){
            sel[j].checked = checkAll.checked;
        }
        // 计算总价
        allTotle()
    }

十、加载事件

正常情况下,js代码是可以写在head标签中,也可以写在/body结束的后面;但是当我们把js代码写在head中,并且js代码中有获取页面html标签的操作的时候,这时候的js代码就会报错  

页面加载完成 ,  script就可以写到页面内容的前面

十一、滚动事件

案例:楼层导航

 <style>
        * {
          margin: 0;
          padding: 0;
        }
        ul,li {
          list-style: none;
        }
        .header {
          position: fixed;
          left: 0;
          top: 0;
          height: 40px;
          width: 100%;
          background-color: rgb(238, 215, 110);
          line-height: 40px;
        }
        .header ul {
          display: flex;
          justify-content: space-around;
        }
        .header ul li.active {
          color: #f00;
        }
        .empty {
          height: 40px;
        }
        .product {
          background-color: rgb(178, 204, 238);
          height: 500px;
        }
        .ratings {
          background-color: rgb(178, 238, 218);
          height: 200px;
        }
        .detail {
          background-color: rgb(231, 238, 190);
          height: 900px;
        }
        .recommend {
          background-color: rgb(241, 202, 220);
          height: 800px;
        }
      </style>
<div class="header">
        <ul>
          <li class="active">商品</li>
          <li>评价</li>
          <li>详情</li>
          <li>推荐</li>
        </ul>
      </div>
      <div class="empty"></div>
      <div class="product floor">
        商品
      </div>
      <div class="ratings floor">
        评价
      </div>
      <div class="detail floor">
        详情
      </div>
      <div class="recommend floor">
        推荐
      </div>
var floorAll = document.querySelectorAll('.floor');
    var liAll = document.querySelectorAll('.header li');
    // var timer;
    for (let i = 0; i < liAll.length; i++) {
            liAll[i].onclick = function () {
                // 移除所有li的颜色
                for (let j = 0; j < liAll.length; j++) {
                    liAll[j].style.color = '#000'; // 设置默认颜色
                }
                // 设置当前点击的li元素颜色
                liAll[i].style.color = 'blue';
                // 滚动到指定位置
                window.scrollTo({
                    top: floorAll[i].offsetTop - 40,
                    behavior: 'smooth'
                });
            };
        }

 文档页面高度

案例:鼠标缩放盒子

<style type="text/css"> 
            /* *{ 
            margin: 0; 
            }  */
        .wrap{ 
        width: 100px; 
        height: 100px; 
        background-color: #ccc; 
        position: relative; 
        } 
        .btn{ 
        position: absolute; 
        bottom: 0; 
        right: 0; 
        width: 20px; 
        height: 20px; 
        background-color: red; 
        } 
        </style> 
</head>
<body>
    <div class="wrap"> 
        <div class="btn"></div> 
    </div>
var warp = document.querySelector('.wrap');
        var btn = document.querySelector('.btn');
        btn.onmousedown = function(e){
            var e = e || window.event;
                //获取btn 的当前位置
                var mouseX = e.clientX;
                var mouseY = e.clientY;
                 console.log(mouseX,mouseY);
                 // 获取初始大小
                 var Width = warp.offsetWidth;
                 var Height = warp.offsetHeight;
            document.onmousemove = function(e){
               // 获取移动后的位置
               var e = e || window.event;
                var nowX = e.clientX;
                var nowY = e.clientY;
                console.log(nowX,nowY);
                // 去差值
                var chaX = nowX - mouseX;
                var chaY = nowY - mouseY;   
                warp.style.width = Width + chaX + 'px';
                warp.style.height = Height + chaY + 'px';
            }
        }
        document.onmouseup = function(){
            document.onmousemove = false;
        }

十二、js 两种添加事件的方式

1、on +  事件名

2、添加点击事件

十三、DOM css动态样式

十四、event对象使用技巧

 

标签:function,style,JavaScript,height,事件,var,document
From: https://www.cnblogs.com/ljygzyblog/p/JavaScript-231118.html

相关文章

  • 11.17 复习JavaScript红宝书的笔记——
    一、原始值与引用值对于原始值和引用值的判断类型各自有对应的操作符,前者可以用typeof操作符lets="Nicholas";letb=true;leti=22;letu;letn=null;leto=newObject();console.log(typeofs);//stringconsole.log(typeofi);//numberconsole......
  • JavaScript-键盘事件
    键盘事件的种类键盘事件由用户击打键盘触发,主要有keydown、keypress、keyup三个事件,它们都继承了KeyboardEvent接口。keydown:按下键盘时触发。keypress:按下有值的键时触发,即按下Ctrl、Alt、Shift、Meta这样无值的键,这个事件不会触发。对于有值的键,按下时先触发keydown事件,再触发......
  • javascript 自定义分页组件
    仿boostrap前端分页组件的实现一 写一个前端自定义分页组件,需要考虑以下问题  /*     需要一个<ul id="pagination"></ul>标签   total; // 总数据的数量   pageSize; // 一页显示数量   pageIndex; // 当前页   */ 二实现细节编写html......
  • (javascript)将ztree树结构的数据转成二维数组
    ztree树结构的数据结构如下:[{"id":3990,"name":"泡沫灭火","iconShow":false,"children":[{"id":8616,......
  • JavaScript之splice()
    参考:https://blog.csdn.net/weixin_45726044/article/details/120151153概述splice()方法通过删除或替换现有元素或者原地添加新的元素来修改数组,并以数组形式返回被修改的内容。此方法会改变原数组。一个参数splice(index)——>从index的位置开始,删除之后的所有元素(包括......
  • 在React 中如何处理事件?
    在React中处理事件有几种常见的方式,具体取决于你使用的是类组件还是函数组件。一:类组件中处理事件:在类组件中,可以通过在JSX中使用内联函数或在类中定义事件处理方法来处理事件。1:内联函数:在JSX中直接使用内联函数处理事件。例如,使用onClick处理点击事件:classMyComponente......
  • javascript postMessage给子页面发消息
    发送消息页面<!DOCTYPEhtml><html><head><title>demo</title><metacharset="utf-8"/><script>varchildwinconstchildname="popup"functionopenChild(){......
  • js给多个具有相同class的元素绑定同一个事件或者样式
    <buttonclass="btn1">month1</button><buttonclass="btn1">month2</button><buttonclass="btn1">month3</button>若要给上面3个都具有btn1的class的按钮,添加同样的点击事件,则如下操作:$(".btn1").each(function(){......
  • 11.16 基本完成个人任务管理系统项目后重新复习JavaScript高级程序设计——声明var与l
    我看的是js高级程序设计第四版,前两章快速了解了一下,第三章开始慢啃,虽然内容枯燥,很多东西自己也知道了,但还是有一些收获的。比如,声明变量的三个关键词:var、let、const;var以前经常用但是会出问题,相比let没有那么严谨(var声明范围函数作用域,而let声明范围块级作用域)。看个例子:这是v......
  • 【分享】javascript汉字转拼音库pinyin-pro
    ......