HTML5中元素的拖放详解

news2024/11/13 9:06:29

第11章 HTML5中元素的拖放

只要为元素添加draggable属性,就可实现元素的拖放

11.1 拖放基础

11.1.1 使用JavaScript代码实现拖放

1.功能描述

H5页面中,添加两个div,divFrame包含divTitle,用鼠标移到divTitle上时,按下鼠标左键并移动鼠标,可以拖动整个divFrame元素。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>使用JavaScript代码实现拖放</title>
    <style>
        #divFrame {
            width: 200px;
            height: 100px;
            border: 1px solid;
            position: relative;
        }

        #divTitle {
            border-bottom: 1px solid;
        }

        #divTitle:hover {
            /* cursor: crosshair; */
            /* background-color: gray; */
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }
        var started;
        var initX, initY, offsetX, offsetY;
        function pageload() {
            var divTitle = $$("divTitle");
            var divFrame = $$("divFrame");
            divFrame.style.left = 30 + "px";
            divFrame.style.top = 20 + "px";
            //按下鼠标触发
            divTitle.onmousedown = function (e) {
                started = true;
                initX = parseInt(divFrame.style.left);
                initY = parseInt(divFrame.style.top);
                offsetX = e.clientX;
                offsetY = e.clientY;
            };
            //鼠标移动时触发的事件
            divFrame.onmousemove = function (e) {
                if (started) {
                    var x = e.clientX - offsetX + initX;
                    var y = e.clientY - offsetY + initY;
                    divFrame.style.left = x + "px";
                    divFrame.style.top = y + "px";
                    divTitle.innerHTML = "已拖动";
                }
            };
            //鼠标弹起时触发的事件
            divFrame.onmouseup = function () {
                started = false;
                document.onmousemove = null;
            }
        }
    </script>
</head>

<body onload="pageload();">
    <div id="divFrame">
        <div id="divTitle">请拖动我</div>
    </div>
</body>

</html>
3.页面效果

11.1.2 在HTML5中实现拖放时触发的事件

在H5中拖放很简单,只要将属性draggable设置为true就可以,拖放时触发的相关事件:

  • dragstart:被拖放元素,开始拖放时触发
  • drag:被拖放元素,正在拖放时触发
  • dragenter:经过目标元素,进入某元素时触发
  • dragover:经过目标元素,在某元素内移动时触发
  • dragleave:目标元素,移出时触发
  • drop:目标元素,目标元素完全接收时触发
  • dragend:被拖放对象元素,整个拖放操作结束时触发
1.功能描述

新建两个div,将一个元素拖到另一个元素时,页面触发的重要事件状态。

2.代码实现
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title></title>
    <style>
        #divDrag {
            width: 100px;
            height: 100px;
            border: 1px solid;
        }

        #divArea {
            float: right;
            width: 200px;
            height: 200px;
            border: 1px solid;
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }

        function pageload() {
            var Drag = $$("divDrag");
            var Area = $$("divArea");
            //添加被拖放元素的dragstart事件
            Drag.addEventListener("dragstart", function (e) {
                StatusHandle("元素正在开始拖动。。。")
            });
            //添加目标元素drop事件
            Area.addEventListener("drop", function (e) {
                StatusHandle("元素拖入成功!")
            });
            //添加目标元素的dragleave事件
            Area.addEventListener("dragleave", function (e) {
                StatusHandle("拖动元素正在离开。。。")
            });
        }
        function StatusHandle(message) {
            $$("divTips").innerHTML += message + "<br>";
        }
        //添加页面的dragover事件
        document.ondragover = function (e) {
            //阻止默认方法,取消拒绝被拖放
            e.preventDefault();
        }
        //添加页面的ondrop事件
        document.ondrop = function (e) {
            //阻止默认方法,取消拒绝被拖放
            e.preventDefault();
        }

    </script>
</head>

<body onload="pageload();">
    <div class="wPub">
        <div class="wPub">
            <div id="divDrag" draggable="true">drag</div>
            <div id="divTips">tips:</div>
        </div>
        <div id="divArea">area</div>
    </div>
</body>

</html>
3.页面效果

11.2 dataTransfer对象应用详解

上个案例,被拖放对象没放入目标中,要实现这一功能,需要调用dataTransfer对象。

该对象携带拖放过程中的数据,它拥有许多使用的属性和方法。

dataTransfer对象的属性:
  • effectAllowed:设置或返回被允许操作的效果,包括none,copy,copyLink,copyMove,line,move,all等。
  • dropEffect:设置或返回当前选定的操作效果类型,若不是effectAllowed的允许范围值,则操作失败。
  • items:返回DataTransferItemList对象,即拖动数据。
  • types:返回dragstart事件中设置的数据格式,如果拖动文件,返回Files型字符串。
  • files:返回被拖动文件FileList清单(如果有)
dataTransfer对象的方法:
  • setData(DOMString format,DOMString data):将拖放元素数据存入dataTransfer对象中
  • getData(DOMString format):读取存入dataTransfer对象中的数据
  • setDragImage(Element img,long x,long y):设置拖放过程中的图标
  • clearData(DOMString format):清空dataTransfer对象中指定格式的数据

format形参格式包含如下几种:text/plain(文本文字格式),text/html(HTML页面代码格式),text/xml(XML字符格式),text/url-list(URL格式列表)。

11.2.1 使用setData与getData方法存入与读取拖放数据

1.功能描述

在上一个案例基础上修改代码,当拖放元素触发dragstart事件时,将元素相关数据通过setData()方法存入dataTransfer对象中,在目标接收拖放元素时触发drop事件,该事件中读取dataTransfer对象中存入的数据并放入目标元素中。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>使用setData与getData方法存入与读取拖放数据</title>
    <style>
        #divDrag {
            width: 100px;
            height: 100px;
            border: 1px solid;
        }

        #divArea {
            float: right;
            width: 200px;
            height: 200px;
            border: 1px solid;
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }
        //自定义返回HTML内容函数
        function RetDragHTMLById(Id) {
            var strHtml = "<div id=" + Id + "></div>";
            return strHtml;
        }

        function pageload() {
            var Drag = $$("divDrag");
            var Area = $$("divArea");
            //添加被拖放元素的dragstart事件
            Drag.addEventListener("dragstart", function (e) {
                var dtf = e.dataTransfer;
                dtf.setData("text/html", RetDragHTMLById(this.id));
            }, false);
            //添加目标元素drop事件
            Area.addEventListener("drop", function (e) {
                var dtf = e.dataTransfer;
                var strHtml = dtf.getData("text/html");
                Area.innerHTML += strHtml;
                e.preventDefault();
                e.stopPropagation();
            }, false);
        }
        //添加页面的dragover事件
        document.ondragover = function (e) {
            //阻止默认方法,取消拒绝被拖放
            e.preventDefault();
        }
        //添加页面的ondrop事件
        document.ondrop = function (e) {
            //阻止默认方法,取消拒绝被拖放
            e.preventDefault();
        }
    </script>
</head>

<body onload="pageload();">
    <div class="wPub">
        <div class="wPub">
            <div id="divDrag" draggable="true">drag</div>
            <div id="divTips">tips:</div>
        </div>
        <div id="divArea">area</div>
    </div>
</body>

</html>
3.页面效果

11.2.2 使用setDragImage方法设置拖放图标

在THML5中,一个元素在被拖放时,还可以改变鼠标的图标,即可以自定义拖放元素时的鼠标图标。要实现这一功能,需要调用dataTransfer对象的setDragImage()方法,调用格式为:

setDragImage(Element img,long x,long y)

其中,参数img是一个元素,表示拖放时显示的元素图标,x表示图标距离鼠标指针的x轴方向的偏移量,y表示图标距离鼠标指针的y轴方向偏移量。

1.功能描述

新创建HTML页面,添加两个

区域,一个作为拖放元素,一个作为目标元素,用于接收拖放来的元素和数据。

选中拖放元素并按住鼠标开始拖放时,鼠标图标将发生变化,拖放完成时,在目标元素中显示“拖动时图标改变”字样。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>使用setDragImage方法设置拖放图标</title>
    <style>
        #divDrag {
            width: 100px;
            height: 100px;
            border: 1px solid;
        }

        #divArea {
            float: right;
            width: 200px;
            height: 200px;
            border: 1px solid;
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }
        function pageload() {
            var Drag = $$("divDrag");
            var Area = $$("divArea");
            var objImg = document.createElement("img");
            objImg.src = "img/dog.jpg";
            //添加被拖动元素的dragstart事件
            Drag.addEventListener("dragstart", function (e) {
                var objDtf = e.dataTransfer;
                objDtf.setDragImage(objImg, -50, -50);
                objDtf.setData("text/plain", "拖动时改变图标");
            }, false);
            //添加目标元素的drop事件
            Area.addEventListener("drop", function (e) {
                var objDtf = e.dataTransfer;
                var strText = objDtf.getData("text/plain");
                Area.textContent += strText;
                e.preventDefault();
                e.stopPropagation();
            }, false)
            //添加页面的dragover事件
            document.ondragover = function (e) {
                //阻止默认方法,取消拒绝被拖放
                e.preventDefault();
            }
            //添加页面的ondrop事件
            document.ondrop = function (e) {
                //阻止默认方法,取消拒绝被拖放
                e.preventDefault();
            }
        }
    </script>
</head>

<body onload="pageload();">
    <div class="wPub">
        <div class="wPub">
            <div id="divDrag" draggable="true">drag</div>
            <div id="divTips">tips:</div>
        </div>
        <div id="divArea">area</div>
    </div>
</body>

</html>
3.页面效果

11.2.3 使用effectAllowed与dropEffect属性设置拖放效果

结合effectAllowed与dropEffect这两个属性,可以自定义拖放过程中的效果。

effectAllowed用于dragstart事件中,绑定被拖放元素,dropEffect用于绑定目标元素。

1.功能描述

在上面例子中,修改代码,拖放元素触发dragstart事件时,将dataTransfer对象的effectAllowed属性设置为move,为目标添加一个dragover事件,当接收数据时,将dropEffect属性值也设为move,从而实现自定义元素拖放效果。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>使用effectAllowed与dropEffect属性设置拖放效果</title>
    <style>
        #divDrag {
            width: 100px;
            height: 100px;
            border: 1px solid;
        }

        #divArea {
            float: right;
            width: 200px;
            height: 200px;
            border: 1px solid;
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }
        function pageload() {
            var Drag = $$("divDrag");
            var Area = $$("divArea");
            var objImg = document.createElement("img");
            objImg.src = "img/dog.jpg";
            //添加被拖动元素的dragstart事件
            Drag.addEventListener("dragstart", function (e) {
                var objDtf = e.dataTransfer;
                /* objDtf.setDragImage(objImg,-50,-50);
                objDtf.setData("text/plain","拖动时改变图标"); */
                objDtf.effectAllowed = "copy";
                objDtf.setData("text/plain", "拖动时动画效果")
            }, false);
            //添加目标元素的dragover事件
            Area.addEventListener("dragover", function (e) {
                var objDtf = e.dataTransfer;
                objDtf.dropEffect = "copy";
                e.preventDefault();
            }, false)
            //添加目标元素的drop事件
            Area.addEventListener("drop", function (e) {
                var objDtf = e.dataTransfer;
                var strText = objDtf.getData("text/plain");
                Area.textContent += strText;
                e.preventDefault();
                e.stopPropagation();
            }, false)
            //添加页面的dragover事件
            document.ondragover = function (e) {
                //阻止默认方法,取消拒绝被拖放
                e.preventDefault();
            }
            //添加页面的ondrop事件
            document.ondrop = function (e) {
                //阻止默认方法,取消拒绝被拖放
                e.preventDefault();
            }
        }
    </script>
</head>

<body onload="pageload();">
    <div class="wPub">
        <div class="wPub">
            <div id="divDrag" draggable="true">drag</div>
            <div id="divTips">tips:</div>
        </div>
        <div id="divArea">area</div>
    </div>
</body>

</html>
3.页面效果

11.3 拖放应用实战

拖放功能重要,借助API可以实现相对复杂的功能与特效,例如:电商平台中的购物车,可以将选中的商品以拖放的方式放入购物车中,同时接收拖来的数据,检测重复性并自动计价。在相册管理中的图片以拖放的方式放入回收站中,改变回收站图标样式,删除图片。

11.3.1 购物车的实现

通常情况,除了点击商品的购买练级额,也可以拖放商品到购物车中。

1.功能描述

创建H5,页面中展示4件图书商品,用户可以任选一件,按住鼠标,以拖放的方式将选择的商品放入购物车中,同时,购物车接收拖来的商品数据,自动增加一条选择记录,并显示商品的基本信息。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>拖放购物车</title>
    <style>
        ul#ulBook {
            height: 200px;
            clear: both;
        }

        ul#ulBook li {
            list-style-type: none;
            float: left;
            margin: 5px;
            padding: 3px;
            text-align: center;
            border: 1px solid;
            width: 60px;
            height: 80px;
        }

        #ulCart {
            height: 200px;
            list-style-type: none;
            /* border: 1px dotted; */
        }

        .lg {
            background-color: lightgray;
        }

        span {
            font-weight: bold;
            display: inline-block;
            width: 100px;
            border: 1px solid;
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }

        function pageload() {
            //获取全部图书商品
            var Drag = document.getElementsByTagName("img");
            //遍历每个图书商品
            for (var i = 0; i < Drag.length; i++) {
                //为每个商品添加dragstart事件
                Drag[i].addEventListener("dragstart", function (e) {
                    var objDtf = e.dataTransfer;
                    objDtf.setData("text/html", addCard(this.title, this.alt, 1));
                }, false)
            }
            var Cart = $$("ulCart");
            //添加目标元素的drop事件
            Cart.addEventListener("drop", function (e) {
                var objDtf = e.dataTransfer;
                var strHtml = objDtf.getData("text/html");
                Cart.innerHTML += strHtml;
                e.preventDefault();
                e.stopPropagation();
            }, false);
        }
        //添加页面dragover事件
        document.ondragover = function (e) {
            e.preventDefault();
        }
        //添加页面drop事件
        document.ondrop = function (e) {
            e.preventDefault();
        }
        //自定义向购物车中添加记录的函数
        function addCard(a, b, c) {
            var strHtml = "<li class='liC'>";
            strHtml += "<span>" + a + "</span>";
            strHtml += "<span>" + b + "</span>";
            strHtml += "<span>" + c + "</span>";
            strHtml += "<span>" + b * c + "</span></li>";
            return strHtml;
        }
    </script>
</head>

<body onload="pageload();">
    <ul id="ulBook">
        <li class="liF">
            <img src="img/实战.jpg" id="img02" alt="42" title="2020年作品" draggable="true" />
        </li>
        <li class="liF">
            <img src="img/JS高级.jpg" id="img03" alt="56" title="2021年作品" draggable="true" />
        </li>
        <li class="liF">
            <img src="img/并发编程.jpg" id="img04" alt="52" title="2022年作品" draggable="true" />
        </li>
        <li class="liF">
            <img src="img/计算机网络.jpg" id="img05" alt="59" title="2023年作品" draggable="true" />
        </li>
    </ul>
    <ul id="ulCart">
        <li>
            <span class="lg">书名</span><span class="lg">定价</span><span class="lg">数量</span><span class="lg">总价</span>
        </li>
    </ul>
</body>

</html>

</body> </html>

3.页面效果

11.3.2 相册的管理

除了上述应用,还可以将相册中某张图片以拖放的方式放入回收站,从而实现管理相册的功能。

1.功能描述

新建H5,以列表方式展示相册中的3张图片,用户可以任选一张,按住鼠标,以拖动的方式放入右下角回收站,拖放成功后,将在页面中显示删除图片的记录数,同时回收站样式也发生相应变化。

2.实现代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>使用拖放API将图片拖入回收站</title>
    <style>
        * {
            list-style-type: none;
        }

        ul {
            width: 400px;
            height: 200px;
            border: 1px dotted;
        }

        ul li {
            float: left;
            margin: 5px;
            padding: 3px;
            text-align: center;
            border: 1px solid;
            width: 60px;
            height: 80px;
        }

        #divRecycle {
            height: 200px;
            width: 200px;
            border: 1px solid;
            border-radius: 100px;
            background-image: url(img/空杯.png);
        }

        #divRecycle.HaveRyl {
            background-image: url(img/实杯.png);
        }
    </style>
    <script>
        function $$(id) {
            return document.getElementById(id);
        }
        var intDeleteNum = 0;
        function pageload() {
            //获取全部图片信息
            var Drag = document.getElementsByTagName("li");
            //遍历图片
            for (var i = 0; i < Drag.length; i++) {
                //为每一张图片添加dragstart事件
                Drag[i].addEventListener("dragstart", function (e) {
                    var dtf = e.dataTransfer;
                    dtf.setData("text/plain", this.id);
                }, false)
            }
            var Recy = $$("divRecycle");
            //添加目标元素的drop事件
            Recy.addEventListener("drop", function (e) {
                var dtf = e.dataTransfer;
                var intVal = dtf.getData("text/plain");
                Drag_Event(intVal);
                Recy.className = "HaveRyl";
            }, false);
        }
        //添加页面dragover事件
        document.ondragover = function (e) {
            e.preventDefault();
        }
        //添加页面drop事件
        document.ondrop = function (e) {
            e.preventDefault();
        }
        function Drag_Event(id) {
            var Node = $$(id);
            Node.parentNode.removeChild(Node);
            intDeleteNum++;
            $$("pStatus").innerHTML = "已成功删除" + intDeleteNum + "张图片!";
        }
    </script>
</head>

<body onload="pageload();">
    <div class="wPub">
        <ul>
            <li id="li01">
                <img src="img/实战.jpg" draggable />
            </li>
            <li id="li02">
                <img src="img/JS高级.jpg" draggable />
            </li>
            <li id="li03">
                <img src="img/并发编程.jpg" draggable />
            </li>
        </ul>
        <p id="pStatus">提示:</p>
        <div id="divRecycle"></div>
    </div>
</body>

</html>
3.页面效果

 对应文档:【有道云笔记】《HTML5实战》
https://note.youdao.com/s/3ubs1KG8

如需源码,请私信我!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2124460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型LLM:合成训练样本的数据分布问题

近几天在研究大模型LLM数数问题时&#xff0c;使用合成数据集来训练LLM“统计字符串&#xff08;100个单词以内&#xff09;中字母的个数”的能力&#xff0c;基于Word进行分词。原始的合成代码在生成随机字符串时&#xff0c;采用如下代码&#xff1a; # self.words为常见英文…

盘古信息:做新能源行业数字化转型升级的领航员

随着全球能源转型的加速与可持续发展目标的明确&#xff0c;新能源行业正步入一个前所未有的广阔发展空间。然而&#xff0c;在迅猛发展的浪潮中&#xff0c;新能源行业也面临着诸多挑战&#xff0c;为应对当前市场环境&#xff0c;新能源行业正积极寻求数字化转型的突破路径&a…

低代码 + BI 数字化转型如何助力制造业供应链协同?

引言 在当今快速变化的商业环境中&#xff0c;制造业面临着前所未有的挑战和机遇。全球化竞争、消费者需求的快速变化、技术创新的加速以及不断增加的成本压力&#xff0c;都要求制造企业不断提高其供应链的效率和灵活性。供应链协同作为一种先进的管理理念和实践&#xff0c;…

实现C程序绑定TCP端口

实现C程序绑定TCP端口 步骤概述伪代码C代码实现解释在网络编程中,TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。绑定TCP端口是服务器端应用程序在网络通信中的一个关键步骤,它允许服务器监听来自客户端的连接请求。 本文将介绍如何使用C语言…

MybatisPlus的学习

[MyBatis-Plus] &#xff08;简称 MP&#xff09;是一个 [MyBatis] [ (opens new window)] 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 基于Mapper接口CRUD Insert方法 // 插入一条记录 // T 就是要插入的实体对象 …

直播录屏怎么录视频?自制教程分享,一键录制精彩瞬间

在数字时代&#xff0c;直播已成为连接观众与内容创作者的重要桥梁&#xff0c;想要留住直播中的每一个精彩瞬间&#xff0c;录屏工具不可或缺。今天&#xff0c;我们就来分享一份自制教程&#xff0c;介绍三款实用的录屏方法&#xff0c;需要的朋友抓紧来看看吧~ 方法一&#…

【Python机器学习】循环神经网络(RNN)——传递数据并训练

与其他Keras模型一样&#xff0c;我们需要向.fit()方法传递数据&#xff0c;并告诉它我们希望训练多少个训练周期&#xff08;epoch&#xff09;&#xff1a; model.fit(X_train,y_train,batch_sizebatch_size,epochsepochs,validation_data(X_test,y_test)) 因为个人小电脑内…

Python函数:匿名函数(lambda)④

文章目录 引言1. 什么是匿名函数&#xff08;lambda&#xff09;&#xff1f;1.1 lambda 函数的语法1.2 示例 2. lambda 函数的使用场景2.1 作为参数传递给高阶函数2.1.1 使用 map2.1.2 使用 filter2.1.3 使用 reduce 2.2 排序2.3 在数据结构中使用lambda函数 3. lambda 函数的…

油耳要怎么清洁耳朵才干净?比较推荐哪种可视耳勺

油耳朵的小伙伴们有没有这样的烦恼呢&#xff1f;一两天不清理耳朵就会发痒&#xff0c;日常用棉签清洁耳朵老是清理不干净&#xff0c;而且在转动棉签时还会把棉絮残留在耳道中&#xff1b;用普通耳勺清理又容易刮破耳道&#xff0c;导致耳朵感染。对于油耳朵的小伙伴&#xf…

潘多拉的盒子还是阿拉丁的神灯:揭示RAG噪声在大语言模型中的作用

一、结论写在前面 论文来自清华大学、北京国家信息科学与技术研究中心 论文标题&#xff1a;Pandora’s Box or Aladdin’s Lamp: A Comprehensive Analysis Revealing the Role of RAG Noise in Large Language Models 论文链接&#xff1a;https://arxiv.org/pdf/2408.135…

参赛心得和思路分享:2021第二届云原生编程挑战赛2: 实现一个柔性集群调度机制

关联比赛: 2021第二届云原生编程挑战赛2&#xff1a;实现一个柔性集群调度机制 参赛心得 历时快两个月的第二届云原生编程挑战赛结束了&#xff0c;作为第一次参赛的萌新&#xff0c;拿下了28名的成绩&#xff0c;与第一名差了19万分&#xff0c;因为赛制时间太长&#xff0c…

【C语言进阶】C语言动态内存管理:深入理解malloc、calloc与realloc

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ ⏩收录专栏⏪&#xff1a;C语言 “ 登神长阶 ” &#x1f921;往期回顾&#x1f921;&#xff1a;C语言自定义类型 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀C语言动态内存管理 &#…

线路及接口基础知识

目录 一、常见视频接口 一、常见视频接口

电话外呼系统对比普通电销有什么区别

电话外呼系统与普通电销在多个方面存在显著差异&#xff0c;这些差异主要体现在效率、成本、智能化程度、数据管理和客户体验等方面。以下是具体的对比分析&#xff1a; ### 一、效率差异 * **电话外呼系统**&#xff1a; - **高效性**&#xff1a;可以同时拨打大量电话&…

刚开始学精益六西格玛管理方法?这份指南建议收藏

精益六西格玛管理方法&#xff0c;作为两大管理哲学的完美结合&#xff0c;正逐渐成为众多企业转型升级的利器。对于刚开始接触这一领域的你来说&#xff0c;掌握精益六西格玛管理的精髓并有效应用于实践中&#xff0c;无疑是一项既具挑战性又极具价值的任务。本文&#xff0c;…

[Linux#48][网络] 令牌环网 | IPv4 | socket 套接字 | TCP | UDP | 网络字节序列

目录 1.网络 1.0 令牌环网&#xff08;了解&#xff09; 1.1 IP 地址 1.3 网络通信的基本脉络 IPv4地址解释 2.Socket 编程预备 2.1 端口号 2.2 传输层协议 2.3 网络字节序列 库函数定义 函数说明 1.网络 1.0 令牌环网&#xff08;了解&#xff09; 相同令牌时&am…

Nest.js 实战 (十三):实现 SSE 服务端主动向客户端推送消息

前言 假如系统又一个这样的业务场景&#xff1a;已登录的用户发起流程或者发布消息之后&#xff0c;需要弹窗通知其他已登录的用户&#xff0c;我们应该如何实现&#xff1f; 在设计实时通信场景时&#xff0c;我们面临的主要挑战是如何有效地通知所有已登录的用户有关新流程…

关于 PreparedStatement

Mysql 层面的语法也支持 prepare 这个确实第一次见 PREPARE prepares a statement for execution (see Section 13.5.1, “PREPARE Statement”).EXECUTE executes a prepared statement (see Section 13.5.2, “EXECUTE Statement”).DEALLOCATE PREPARE releases a prepared…

半天玩转大模型技术之RAG

引 言 当前大模型在金融行业最广泛的应用之一就是知识问答&#xff0c;而支撑该应用的技术正是当下火热的检索增强生成&#xff08;Retrieval Augmented Generation&#xff09;技术&#xff0c;简称 RAG。因企业具体的业务往往需要注入特定的知识&#xff0c;比如ChatBI中企业…

Google出了一个黑科技,可以把书变成真人多角色对话的音频,效果真的很牛!

大家有没有想过,像读书、查资料这种事情,如果可以用听的,效率会不会更高?我想大部分人都曾有过这种念头。尤其是在这信息爆炸的时代,手头上有大量的书籍、论文等资源,但我们根本没时间一页一页地去翻。对吧?这时,Google Illuminate 的出现,简直像是为我们解了燃眉之急…