如何修复拖放 JavaScript

2024-03-04

我创建了这个页面和脚本来使用 JavaScript、HTML、CSS 拖放对象。我聚焦对象跟随鼠标将鼠标悬停在页面项目上并将其放在容器上,但我的问题是拖放不起作用?

这是代码:

HTML:

<body onload="initPage()">

    <div class="container">
        <span id="spotLight"></span>
        <h1>Drag and Drop Demos</h1>

        <h2>Page Elements</h2>
        <p>
            Drag the elements on the right into the drop area.
        </p>
        <div id="dd-elements" class="clearfix">
            <ul id="drag-elements">
                <li draggable="true">Element One</li>
                <li draggable="true">Element Two</li>
                <li draggable="true">Element Three</li>
                <li draggable="true">Element Four</li>
                <li draggable="true">Element Five</li>
            </ul>

            <div id="drop-target-one">
                Drop Here!
            </div>
        </div>
    </div>
</body>

CSS:

.container {
    max-width: 960px;
    margin: 0 auto;
    padding: 1em;
}



#drop-target-one,
#dd-files,
#dd-images {
    border: 5px dashed #D9D9D9;
    border-radius: 10px;
    padding: 5em 2em;
    text-align: center;
}

.over {
    background: #F7F7F7;
}

#drag-elements {
    list-style: none;
    padding: 0;
    margin: 0 0 1em;
}

#drag-elements li {
    display: inline-block;
    padding: 0.5em 1em;
    margin: 0 1em 1em 0;
    border: 1px solid #D9D9D9;
    background: #F7F7F7;
    border-radius: 3px;
}

//spotLight
#spotLight {
 position: absolute;
  left: 50px;
  top: 50px;
  width: 200px;
  height: 200px;
  border-radius: 20px;

  box-shadow: 0px 0px 0px 300px rgba(255, 255, 255, 0.5);
}

#spotLight:after {
  content: '';
  position: absolute;
  left: -25px;
  top: -25px;
  right: -25px;
  bottom: -25px;
  border: solid 1px gray;
  border-radius: 25px;

  box-shadow: 0px 0px 0px 300px rgba(255, 255, 255, 0.6);
}


.clearfix {
  *zoom: 1; }

.clearfix:before,
.clearfix:after {
  display: table;
  line-height: 0;
  content: ""; }

.clearfix:after {
  clear: both; }

JavaScript:

window.onload = function() {


    var dropZoneOne = document.querySelector('#drop-target-one');
    var dragElements = document.querySelectorAll('#drag-elements li');
    var elementDragged = null;

    for (var i = 0; i < dragElements.length; i++) {


        dragElements[i].addEventListener('dragstart', function(e) {
            e.dataTransfer.effectAllowed = 'move';
            e.dataTransfer.setData('text', this.innerHTML);
            elementDragged = this;
        });


        dragElements[i].addEventListener('dragend', function(e) {
            elementDragged = null;
        });
    };


    dropZoneOne.addEventListener('dragover', function(e) {
        if (e.preventDefault) {
            e.preventDefault();
        }

        e.dataTransfer.dropEffect = 'move';

        return false;
    });


    dropZoneOne.addEventListener('dragenter', function(e) {
        this.className = "over";
    });

    // Event Listener for when the dragged element leaves the drop zone.
    dropZoneOne.addEventListener('dragleave', function(e) {
        this.className = "";
    });


    dropZoneOne.addEventListener('drop', function(e) {
        if (e.preventDefault) e.preventDefault(); 
    if (e.stopPropagation) e.stopPropagation(); 

        this.className = "";
        this.innerHTML = "Dropped " + e.dataTransfer.getData('text');

        document.querySelector('#drag-elements').removeChild(elementDragged);
        elementDragged = null;

        return false;
    });

};
function initPage() { 
    document.onmousemove = followMe;
}

function followMe(evt) {
    var evt = (evt) ? evt : ((window.event) ? event : null);
    var object = document.getElementById('spotLight');
        object.style.left = evt.clientX - (object.offsetWidth/2) + 'px';
        object.style.top = evt.clientY - (object.offsetHeight/2) + 'px';
        return;
}

Fiddle:

http://jsfiddle.net/Ca5r2/ http://jsfiddle.net/Ca5r2/


好吧,我发现了一些让 jsFiddle 正常工作的东西。

首先,元素不可拖动的原因与伪元素#spotlight:after 有关。它被定位为“绝对”,上、左、下、右值为 -25px。我不认为是在做你想要的事情。具有这些位置的元素将占据整个屏幕,因为它将从左边框左侧的 25 像素拉伸到右边缘之后的 25 像素,依此类推。临时解决办法是添加css属性

pointer-events: none;

其次,你有

<body onload="initPage()">

and

function initPage() { 

通常这没问题,但在 JSFiddle 中,javascript 窗口的作用域位于页面 onload 处理程序内部,因此函数的作用域位于本地。要使它们进入全局作用域,您可以执行以下操作,但我暂时更改了要显式添加到窗口作用域的函数:

window['initPage'] = function() { 

另外,因为我们已经在 onload 处理程序内部,所以我删除了

window.onload = function() {

范围,包括末端大括号。

这是工作中的JSFiddle http://jsfiddle.net/Ca5r2/7/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何修复拖放 JavaScript 的相关文章

  • Chrome SuppressDifferentOriginSubframeJSDialogs 使用 JS 设置覆盖?

    Chrome 开发团队显然刚刚推出了一项名为 SuppressDifferentOriginSubframeJSDialogs 的新 功能 这使得默认情况下不会显示来自与父级不同域上的 iFrame 的警报 确认框 https www ch
  • JQuery 动画文本

    找到简单 简单的动画文本是非常困难的 喜欢这个网站上的 内爆 http codecanyon net item jquery text animation full screen preview 233445 http codecanyon
  • 向对象添加元素

    我需要填充一个 json 文件 现在我有这样的东西 element id 10 quantity 1 我需要添加另一个 元素 我的第一步是使用该 json 将该 json 放入对象类型中cart JSON parse 现在我需要添加新元素
  • 在 JavaScript 中比较表单中的两个数字

    当我尝试比较不同的数字时 数字发生变化 但文本部分保持不变 这只发生在较大 较小的情况下 而不会发生在 NaN 或相等的情况下 这是我的代码 function check var a document getElementById a va
  • dompdf:找不到图像或类型未知

    这是我的代码 我几乎尝试了所有在 PDF 上显示图像的方法 但仍然不起作用 你能帮我解决这个问题吗 我还将 DOMPDF ENABLE REMOTE 设置为 true 结果仍然相同 require once dompdf autoload
  • Bing.com 如何创建放大的缩略图?

    当我使用 Bing com 搜索图像时 我发现它们的图像经过精心裁剪和排序 当您将鼠标放在图像上时 会弹出另一个窗口 其中显示放大的图像 我想在我的程序中做同样的事情 我检查了他们页面的源代码 他们正在使用 javascript 但我仍然不
  • 提交前验证表单(比检查空字段更复杂)

    我有一个包含时间输入的表单 具体来说 开放时间和结束时间 当按下提交按钮时 它会转到一个 php 页面 其中这些输入将添加到数据库中 在允许提交表单之前我想检查一些事情 例如 我想确保开始时间早于 小于 结束时间 这是表格 Opens
  • 在 HTML 中移动选取框/下移文本

    我正在尝试向下移动或移动 HTML 中的文本 但我似乎无法将其移动到任何地方 我添加了一个颜色命令来更改文本的颜色 但似乎只是移动了 它一直到顶部
  • 带 CSS 网格的等宽侧边栏列

    是否可以让左右列具有相同的宽度 而中间列占据剩余空间 我不想设置像这样的百分比grid template columns 20 60 20 因为并不总是确定这些列的内容是什么 Flexbox 和表格似乎没有解决这个问题的方法 所以我再次尝试
  • CSS:将加载指示器放置在屏幕中央

    如何将加载指示器放置在屏幕中央 目前我正在使用一个小占位符 它似乎工作得很好 但是 当我向下滚动时 加载指示器保持在该预定义位置 我怎样才能让它跟随滚动 使其始终位于顶部 busy position absolute left 50 top
  • 在 vue.js 模板中包含外部脚本

    我是 Vue js 和 web pack 的新手 所以我决定使用 vue cli webpack 来构建初始应用程序 我试图包含一个外部脚本 例如组件 不需要的模板中 但是 Vue 警告这是不允许的 我的 index html 文件与最初生
  • Window 与 Var 声明变量[重复]

    这个问题在这里已经有答案了 可能的重复 JavaScript 中使用 var 和不使用 var 的区别 https stackoverflow com questions 1470488 difference between using v
  • 元素中优先考虑 ngclick 而非 nghref

    tl dr 如何强制 Angular 只执行 ngclick 指令 a 元素而不清空 删除href 我的网站在某些元素上有一些自定义行为 模式打开 位置栏更新等 但对于 SEO 索引我also需要它成为一个 a 元素与href包含有效链接的
  • Javascript 选择 onchange='this.form.submit()'

    我有一个带有选择和一些文本输入的表单 我希望在更改选择时提交表单 使用以下方法可以正常工作 onchange this form submit 但是 如果表单还包含提交按钮 则当选择更改时 表单不会提交 我猜有某种冲突 我在这里有什么选择
  • 理论上防止 WebSocket 中第一个收到的消息丢失

    服务器端代码发送消息立即地连接打开后 它向客户端发送初始配置 问候语 以下代码是在客户端 var sock new WebSocket url sock addEventListener error processError sock ad
  • Excel 类似 HTML 表格,可在 x 轴(完整表格)和 y 轴(标题固定)上滚动

    我想建立一个具有固定宽度列的表格 在大多数情况下 表数据会水平和垂直溢出 如果列的宽度大于视图宽度 则需要水平滚动条来滚动并查看所有表列 同时滚动标题和数据 如果数据的高度大于可用视图 则会出现垂直滚动框 但在滚动时保持标题固定 以便用户关
  • 使用文本遮盖视频

    是否可以使用 HTML CSS 文本来屏蔽视频 我已经找到并设置了这种工作方式 但没有一种允许文本后面有透明背景 例如 这支笔要求您进行某种填充 它并不是真正掩盖实际视频 而是创造幻觉 https codepen io dudleystor
  • 如何在粘贴时获取文本区域输入字段的新值?

    我发现当我尝试从文本区域字段读取值时onpaste调用函数时 我得到字段的旧值 粘贴操作之前的值 而不是新值 粘贴操作之后的值 以下是此行为的演示 http jsfiddle net qsDnr http jsfiddle net qsDn
  • 通过 vh 和 vw 调整 css 字体大小

    所以我想根据容器的大小自动调整文本的大小 但是如果我使用类似的东西 font size 5vw 看起来不错 但是当我缩小页面时 高度开始变得太小 无论如何 我是否可以根据 vh 和 vw 调整文本大小 例如 如果我只是减小页面的宽度 那么高
  • C# 中的 mshtml.HTMLDocumentClass

    在 C 中 我设法从 InternetExplorer 对象获取整个 HTMLDocumentClass 导航到某个 URL 然而 在 Visual Studio 2008 的调试模式下 该特定 URL 的 HTMLDocumentClas

随机推荐

  • 使用 C# 计算每个句子中的单词数

    我需要创建一个程序来显示单词最多的句子 string st I like apples I like red apples I like red apples than green apples foreach string s in st
  • LINQ to SQL 与 ADO.Net

    LINQ to SQL 和 ADO net 之间有什么区别 ADO NET 是 NET Framework 的底层数据访问 API 很像 Java 中的 JDBC 它自 NET 第一个版本发布以来就已存在 LINQ to SQL 是一个基于
  • 连续 2d 切片上的 Numpy 向量化函数

    我有一个 3D numpy 数组 我想通过在沿轴的连续 2d 切片上执行函数并将生成的切片堆叠在一起来形成一个新的 3d 数组 显然有很多方法可以做到这一点 我想以最简洁的方式做到这一点 我认为这是可能的numpy vectorize 但这
  • 查找两个 C# 对象之间的属性差异

    我正在开发的项目需要在用户更改电子邮件 帐单地址等时进行一些简单的审核日志记录 我们正在使用的对象来自不同的来源 一个是 WCF 服务 另一个是 Web 服务 我已经使用反射实现了以下方法来查找两个不同对象上属性的更改 这会生成一个具有差异
  • 如何使用 Bower 作为包管理器获取 Less v.2.0.0 的 Rhino 版本

    我正在使用 less js 的 Rhino 版本 使用 Bower 将其提取到我的开发环境中 在 1 7 5 下 一切正常 bower 将获得所有不同的版本 Node 和 Rhino 版本都将存储在我的环境中 最近更新到 2 0 0 后 似
  • PHP:嵌入另一个 URL 的 URL 的较短/模糊编码?

    我正在为自己编写一个脚本 它基本上可以让我在单个 get 请求的查询字符串中发送一个 URL 和两个整数维度 我使用 base64 对其进行编码 但它太长了 我担心 URL 可能会变得太大 有谁知道另一种更短的方法吗 在 get 请求中收到
  • 在 GAE/J 和 JPA 上使用 @MappedSuperclass 时,“字段 jdoFieldFlags 发生冲突”

    在 GAE J 上查询由映射超类扩展的实体时 出现错误 映射超类 import java sql Timestamp import javax persistence MappedSuperclass MappedSuperclass pu
  • numba 中的协程

    我正在开发一些需要快速协程的东西 我相信 numba 可以加快我的代码速度 这是一个愚蠢的例子 一个函数对其输入进行平方 并添加其被调用的次数 def make square plus count i 0 def square plus c
  • 如何在CSS中使滑块居中?

    我在主题上安装了这个插件 这个主题有一个滑块 但我不喜欢它 所以我安装了这个 http wordpress org extend plugins content slide http wordpress org extend plugins
  • 使用 gcc 编译 Python C 扩展时出现“...无法弄清楚...的架构类型”问题

    我刚刚从 Snow Leopard 升级到 Lion 我必须更新的旧 python c 扩展不想正确编译 我真的不知道在这里做什么 任何人都可以帮助我 使其编译正常吗 它在 Snow Leopard 中编译得很好 Home folder M
  • 正确从 QGraphicsScene/QgraphicsItemGroup/QGraphicsView 中删除项目

    我正在尝试使用可移动控制点绘制一个图QGraphicsView QGraphicsScene QGraphicsItemGroup 我遇到的问题是我找不到任何删除 删除该项目的方法 我的想法如下 我将有一个 QGraphicsView 在它
  • IIS 的 URL 重写规则替换每个页面中的文件夹路径

    我的网站项目有 300 多个页面 随着时间的推移 我们创建了一个安全的新服务器 该服务器专门用于网站中的所有图像 所以这是场景 当前图像的实现 在 aspx 中 在 css 中 http www mysite com assets comm
  • 朴素高斯预测概率仅返回 0 或 1

    我从 scikit sklearn 训练了 GaussianNB 模型 当我调用该方法时classifier predict proba它仅在新数据上返回 1 或 0 预计会返回预测正确与否的置信度百分比 我怀疑它能否对以前从未见过的新数据
  • Android 中将 ImageView 置于另一个 ImageView 中

    好吧 我必须将一个 ImageView 放入另一个 ImageView 中 它较小并且必须正好位于中心 我有两个针对不同屏幕分辨率缩放的图像 但我只能在一部手机上进行测试 我想知道是否使用 dpi 设置第二个图像的高度和宽度以适合我的屏幕分
  • 使用 FUSE 在 python 中创建临时文件

    我正在尝试使用 python fuse 编写程序 但无法记录文件 我的 file class 看起来像这样 class FuseFile object def init self path flags mode debug path deb
  • 获取 SWT 视图的大小

    我正在尝试确定 SWT 视图的大小 以便可以在插件中正确布局小部件 我正在使用 Java 8 运行 Eclipse Neon 我正在使用的代码如下 import org eclipse swt SWT import org eclipse
  • 实体框架:连接两个表和 where 子句

    我在使用实体框架和 PostgreSQL 时遇到问题 有人知道如何连接两个表并将第二个表用作 where 子句吗 我想在实体框架中执行的选择将在 SQL 中 SELECT ai id ai title ai description ai c
  • 如何包含绝对位置div?

    我有这个小提琴here http jsfiddle net 45atnh0u 这是下图 我需要实现的是让黑色容器根据里面的项目 项目是A B C 动态扩展 输出必须是 无需静态设置高度 我的html是 div class container
  • 相当于 gcc/g++ 中的 __declspec( bare )

    相当于什么 declspec naked in gcc g declspec naked 实际上用于声明一个没有任何尾声和序言的函数 在某些体系结构上 gcc 支持称为 naked 的属性 最近的gcc docs http gcc gnu
  • 如何修复拖放 JavaScript

    我创建了这个页面和脚本来使用 JavaScript HTML CSS 拖放对象 我聚焦对象跟随鼠标将鼠标悬停在页面项目上并将其放在容器上 但我的问题是拖放不起作用 这是代码 HTML div class container span spa