前端面试题84(js如何实现拖拽功能)

在这里插入图片描述
在JavaScript中实现拖拽功能,我们通常会用到HTML的draggable属性以及一系列的事件监听器来完成这个任务。下面是一个简单的示例,展示了如何让一个元素可拖拽,并且能够限制其拖动范围。

HTML部分

首先,我们需要一个可拖动的元素:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Draggable Demo</title>
<style>
  #draggable {
    width: 100px;
    height: 100px;
    background-color: red;
    position: absolute;
  }
</style>
</head>
<body>

<div id="draggable" draggable="true"></div>

<script src="drag.js"></script>
</body>
</html>

JavaScript部分 (drag.js)

接下来是JavaScript代码,用于处理拖拽逻辑:

document.addEventListener('DOMContentLoaded', function() {
  var draggable = document.getElementById('draggable');
  
  // 鼠标按下时记录初始位置
  draggable.addEventListener('mousedown', function(e) {
    var offsetX = e.clientX - draggable.offsetLeft;
    var offsetY = e.clientY - draggable.offsetTop;

    // 移动鼠标时调整元素位置
    function onMouseMove(e) {
      var newX = e.clientX - offsetX;
      var newY = e.clientY - offsetY;

      // 限制拖动范围,例如窗口内
      var windowWidth = window.innerWidth;
      var windowHeight = window.innerHeight;
      newX = Math.min(Math.max(0, newX), windowWidth - draggable.offsetWidth);
      newY = Math.min(Math.max(0, newY), windowHeight - draggable.offsetHeight);

      draggable.style.left = newX + 'px';
      draggable.style.top = newY + 'px';
    }

    // 添加鼠标移动和抬起的事件监听器
    document.addEventListener('mousemove', onMouseMove);
    document.addEventListener('mouseup', function() {
      document.removeEventListener('mousemove', onMouseMove);
    });
  });
});

这段代码首先等待文档加载完成,然后为可拖动的元素添加了一个mousedown事件监听器。当鼠标按下时,它记录下鼠标点击位置与元素左上角的偏移量。随后,在mousemove事件中,根据这个偏移量计算元素的新位置,并通过比较限制其在窗口内的拖动范围。最后,在鼠标抬起(mouseup)时,移除mousemove事件监听器,以停止跟踪鼠标移动。

这样就实现了一个基本的、限制在窗口范围内的拖拽功能。

### jQuery 中级前端开发面试题及答案 以下是与 jQuery 相关的中级前端开发面试题,涵盖了一些常见问题及其解答。这些问题不仅考察了对 jQuery 的基本理解,还涉及一些更深入的知识点。 #### 1. 如何使用 jQuery 动态创建一个按钮并绑定点击事件? 可以使用 `jQuery` 的 `$()` 方法来动态创建 DOM 元素,并通过 `.on()` 方法绑定事件。 ```javascript // 创建按钮 var button = $('<button>', { text: 'Click Me', click: function () { alert('Button clicked!'); } }); // 将按钮添加到页面中 $('body').append(button); ``` 这种动态创建和绑定事件的方式在实际项目中非常常见[^1]。 #### 2. 解释 `$(document).ready()` 和 `window.onload` 的区别。 `$(document).ready()` 在 DOM 加载完成后立即执行,而 `window.onload` 需要等到页面上的所有资源(包括图片、样式表等)加载完毕后才会执行。因此,`$(document).ready()` 更适合用于初始化 DOM 操作[^2]。 #### 3. 如何用 jQuery 获取具备 `multiple=true` 的 `<select>` 标签的选中项? 可以通过以下选择器获取所有具备 `multiple=true` 的 `<select>` 标签的选中项: ```javascript $('[name=NameOfSelectedTag]:selected'); ``` 这个选择器结合了属性选择器和伪类选择器,能够准确地定位目标元素[^3]。 #### 4. 如何使用 jQuery 实现节流(throttle)功能? 节流是一种优化性能的技术,防止函数被过于频繁地调用。可以通过定时器实现节流效果: ```javascript function throttle(fn, delay) { let timer = null; return function () { if (!timer) { timer = setTimeout(() => { fn.apply(this, arguments); timer = null; }, delay); } }; } // 示例:绑定滚动事件 $(window).on('scroll', throttle(function () { console.log('Scrolling...'); }, 300)); ``` 这种方法在处理滚动或调整窗口大小时特别有用[^1]。 #### 5. 解释 jQuery 的 `$.Deferred` 对象及其用途。 `$.Deferred` 是 jQuery 提供的一种处理异步操作的工具。它允许开发者注册多个回调函数,并根据异步任务的状态(成功或失败)调用相应的回调。 ```javascript function asyncTask() { var deferred = $.Deferred(); setTimeout(function () { deferred.resolve('Task completed!'); }, 1000); return deferred.promise(); } asyncTask().done(function (result) { console.log(result); // 输出 "Task completed!" }); ``` 这种方式在 AJAX 请求或其他异步操作中非常实用[^2]。 #### 6. 如何使用 jQuery 实现拖拽功能? 可以通过 jQuery UI 提供的 `draggable()` 方法轻松实现拖拽功能。 ```javascript $(function () { $('#draggableElement').draggable(); }); ``` 需要注意的是,这需要引入 jQuery UI 库[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GIS-CL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值