【H5】1 - 新增属性:placeholder、input 的 新type、contenteditable - 是否可编辑、draggable - 是否可拖拽

news/2024/7/3 12:56:06 标签: html5

文章目录

      • 1、placeholder - 用作提示信息
      • 2、input 的 新type
      • 3、contenteditable - 是否可编辑
      • 4、draggable - 是否可拖拽

总结: 只有placeholder \ contenteditable 没有兼容问题

1、placeholder - 用作提示信息

placeholder:用作提示信息 ,没有兼容性问题

<input type="text" placeholder="请输入用户名">

2、input 的 新type

之前的type:text,radio,checkbox,file,password,submit

<input type="file">

input 的 新type:

    <form> <!-- 写在form表单下 -->
        <!-- Calendar类:是个大类,不止有一种,时间插件,不常用,兼容性不好,只有chrome支持 -->
        日期date: <input type="date">  
        时间time:<input type="time">
        周 week: <input type="week">
        年月日+ 时间datetime-local:<input type="datetime-local">
        <br>

        数字number: <input type="number"><!-- 只有chrome支持 -->
        邮件email:<input type="email"> <!-- 只有chrome、火狐支持 -->
        颜色选择器color: <input type="color" name='color'> <!-- 只有chrome支持 -->

        range : <input type="range" min="1" min="100" name='range1'> <!-- 只有chrome、safari支持 -->
        search : <input type="search" name="search">  <!-- 只有chrome支持,safari支持一点功能 -->
        url : <input type="url"> <!-- 只有chrome、火狐支持 -->
        <input type="submit">
    </form>

3、contenteditable - 是否可编辑

  1. contenteditable 属性,默认值是false,不可编辑; true的话可编辑
  2. 没有兼容性问题,可以用来修改表格
  3. 这个属性可以继承,如果继承了想修改当前,也可以覆盖
    <div contenteditable="true">
        hello 可编辑
        <br>
        <span>world!可编辑</span>
    </div>
    <div contenteditable="true">
        hello 可编辑
        <br>
        <span contenteditable="false">world!不可编辑</span>
        <!-- 注意这里是:span 内部内容不能编辑和删除,但是span标签可以被删除 ,不建议这样嵌套写-->
    </div>

4、draggable - 是否可拖拽

  1. div标签 默认值是false,不可拖拽;a标签/img 默认是true,可拖拽
  2. 只有chrome支持,safari支持, (部分)火狐不支持
  3. 拖拽的组成:被拖拽的物体目标区域
  4. 被拖拽的物体的声明周期:按下开始移动的瞬间–叫 拖拽开始ondragstart; 移动的时候–拖拽进行中ondrag拖拽结束ondragend
oDragDiv.ondragstart = function(e){   //开始事件:按下物体的瞬间是不会触发事件的,必须稍微移动一点点,才触发拖拽开始事件
    console.log(e);
    // e.clientX / e.clientY 代表起始的时候鼠标的点
}
oDragDiv.ondrag = function(e){   //移动事件:也是移动的一瞬间开始触发
    console.log(e);
}
oDragDiv.ondragend = function(e){   //结束事件:松开物体的瞬间触发
    console.log(e);
} 
  1. 目标区域可以接收过来的元素, 目标区域的声明周期进入ondragenter、移动ondragover、离开ondragleave 、放下ondrop

注意:

  1. 拖拽进入时触发的事件,不是元素进入就触发,而是拖拽的鼠标进入才触发
  2. 要执行drop 事件,需要先在ondragover里阻止默认事件,e.preventDefault();
targetDiv.ondragenter = function(e){   //拖拽进入时触发的事件,不是元素进入就触发,而是拖拽的鼠标进入才触发

}
targetDiv.ondragover = function(e){    //在区域上面移动 触发事件:类似被拖拽物体的 ondrag事件,都是不停的触发
    e.preventDefault(); //阻止默认事件,
}
targetDiv.ondragleave = function(e){   //在目标区域离开触发:

}
targetDiv.ondrop = function(e){    // html所有元素,拖拽结束的时候(拖拽周期结束时),默认事件都是回到原处
    console.log('drop');
}
// 事件是由行为触发的,但是一个行为可以触发不止一个事件, ondragover 执行完,可以执行   回到原处 ;也可以执行drop事件,默认执行回到原处,要阻止默认事件,才能触发drop事件

demo1: 拖拽dragBox然后可以放下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>H5 新增属性</title>
    <style>
        .dragBox{
            position:absolute;   /*拖拽放下的时候要给left / top 赋值,所以要写position */
            width:100px;
            height:100px;
            background:green;
        }
        .target{
            position:absolute;
            left:600px;
            width:200px;
            height:200px;
            border:1px solid #666;
        }
    </style>
</head>
<body>
    <div class='dragBox' draggable='true'>被拖拽的物体</div>
    
    <div class="target">目标区域</div>
    <script>
        // 被拖拽的物体,及其声明周期------------------
        var oDragDiv = document.getElementsByClassName('dragBox')[0];

        var beginX = 0,
            beginY = 0
        oDragDiv.ondragstart = function(e){
            beginX = e.clientX;    //开始事件里,记录开始的坐标
            beginY = e.clientY;
        }
        oDragDiv.ondragend = function(e){
            var x = e.clientX - beginX;    //结束事件里,根据结束左边计算拖动的距离
            var y = e.clientY - beginY;
            oDragDiv.style.left = oDragDiv.offsetLeft + x + 'px';    //根据原理的偏移量 计算现在的位置
            oDragDiv.style.top = oDragDiv.offsetTop + y + 'px';   //要设置left / top属性,必须有position 属性
        }

        // 目标区域/目标元素----------------------------------
        // 目标区域可以接收过来的元素,
        var targetDiv = document.getElementsByClassName('target')[0];
        targetDiv.ondragenter = function(e){   //拖拽进入时触发的事件,不是元素进入就触发,而是拖拽的鼠标进入才触发

        }
        targetDiv.ondragover = function(e){    //在区域上面移动 触发事件:类似被拖拽物体的 ondrag事件,都是不停的触发
            e.preventDefault(); //阻止默认事件,
        }
        targetDiv.ondragleave = function(e){   //在目标区域离开触发:

        }
        targetDiv.ondrop = function(e){    // html所有元素,拖拽结束的时候(拖拽周期结束时),默认事件都是回到原处
            console.log('drop');
        }
        // 事件是由行为触发的,但是一个行为可以触发不止一个事件, ondragover 执行完,可以执行   回到原处 ;也可以执行drop事件,默认执行回到原处,要阻止默认事件,才能触发drop事件

    </script>
</body>
</html>

demo2: box1 和 box2 都是拖拽区域了,可以在两个区域来回拖拽
注意:e.dataTransfer.effectAllowed = 'link';e.dataTransfer.dropEffect = 'link';两个属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .box1{
            width: 150px;
            height:auto;
            border: 1px solid #666;
            position: absolute;
            padding:10px;
        }
        .box2{
            width: 150px;
            height:auto;
            border: 1px solid #666;
            position: absolute;
            left:300px;
            padding:10px;
        }
        li{
            list-style: none;
            width:100px;
            height:30px;
            background: green;
            position: relative;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <ul>
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    </div>
    <div class="box2"></div>
    <script>
        var dragDom;  //用来存拖拽的是哪个元素
        var liList = document.getElementsByTagName('li');
        for(let i = 0;i < liList.length;i++){
            liList[i].setAttribute('draggable',true);   //设置属性,让其可拖拽
            liList[i].ondragstart = function(e){
                dragDom = e.target;  //e.target 是事件的触发源,就是谁触发了这个事件,就是拖拽的元素
                e.dataTransfer.effectAllowed = 'link';  //这个属性必须在 ondragstart里写,其他里面不好使,link 是链接
            }
        }
        
        var box2 = document.getElementsByClassName('box2')[0];
        box2.ondragover = function(e){
            e.preventDefault();  //阻止默认事件
        }
        box2.ondrop = function(e){   //要放下,就要先阻止默认事件
            box2.appendChild(dragDom);
            dragDom = null;
        }

        var box1 = document.getElementsByClassName('box1')[0];    //这样box1  和 box2 都是拖拽区域了,可以在两个区域来回拖拽
        box1.ondragover = function(e){
            e.preventDefault(); 
        }
        box1.ondrop = function(e){   
            e.dataTransfer.dropEffect = 'link'; // 这个必须放在drop里,要和拖拽原理ondragstart里的allow相对应
            box1.appendChild(dragDom);
            dragDom = null;
        }
    </script>
</body>
</html>

http://www.niftyadmin.cn/n/1147685.html

相关文章

Laravel核心解读--完结篇

过去一年时间写了20多篇文章来探讨了我认为的Larave框架最核心部分的设计思路、代码实现。通过更新文章自己在软件设计、文字表达方面都有所提高&#xff0c;在刚开始决定写Laravel源码分析地文章的时候我地期望是自己和读者通过学习Laravel核心的代码能在软件设计上带来提高&a…

大连马拉松比赛期间多条公交临时改线移站

为了保证第22届大连国际马拉松赛顺利进行&#xff0c;根据大连市公安局交通警察支队《关于第22届大连国际马拉松赛期间部分道路采取临时交通管制措施的通告》&#xff0c;下列公交车线路将临时改线、移站&#xff0c;具体事宜通告如下&#xff1a; 16、29、405、801路汽车及旅…

南方都市报:红心照耀MSN

16日&#xff0c;许多网友在打开MSN的时候都有点惊讶&#xff0c;发现MSN界面一片飘红&#xff0c;一众好友签名前都多了一颗红心和“CHINA”字样。有网友以“那场面是相当的壮观”来形容。 在国际上一些组织和个体对北京奥运提出抵制的大背景下&#xff0c;中国网友以自己的…

好用工具推荐

文章目录1、LICEcap - Github/CSDN 添加gif动图2、 XSwitch - 跨域3、pdf 文件 转 word4、最新Axure谷歌浏览器Chrome扩展程序安装方法1、LICEcap - Github/CSDN 添加gif动图 写博客的时候&#xff0c;遇到复杂的过程&#xff0c;用动图表述&#xff0c;直观有效又显得逼格很高…

webpackPlugin插件总结

功能类 html-webpack-plugin 自动生成html&#xff0c;基本用法&#xff1a; new HtmlWebpackPlugin({filename: index.html, // 生成文件名template: path.join(process.cwd(), ./index.html) // 模班文件 }) copy-webpack-plugin 拷贝资源插件 基本用法&#xff1a; new Copy…

【移动端布局】1 -基本概念:设备像素、css像素、屏幕尺寸、像素密度ppi、像素比dpr、viewport、meta标签、样式重置

文章目录0、关于web app1、移动端与pc端的区别2、尺寸相关概念2.1、设备像素&#xff08;物理像素&#xff09;2.2、CSS像素(设备独立像素&#xff0c;逻辑像素)2.3、屏幕的尺寸2.4、像素密度PPI - 每英寸&#xff08;面积&#xff09;上像素&#xff08;设备像素&#xff09;的…

CPI疯涨人民币贬值 存款10万一年缩水6000元

存款10万一年缩水6000 CPI疯涨人民币贬值,现金放在家中损失更达8000多元 本报讯 &#xff08;记者 伊晓霞&#xff09;昨日国家统计局公布了3月份的最新统计数据&#xff0c;3月的居民消费价格总水平同比上涨8.3%&#xff0c;而目前一年期定期存款利率只有4.14%&#xff0c;扣…

es6学习之let和const

1. 块级作用域 es5只有函数作用域和全局作用域&#xff0c;es6增加了块级作用域 if (true){ } //es5中&#xff0c;if语句不是一个作用域 //es6中&#xff0c;if语句是一个块级作用域 复制代码let和const 声明的变量只在块级作用域内有效 2. let let类似于var的用法 3. cons…