iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用JavaScript实现一个拖拽缩放效果
  • 864
分享到

如何使用JavaScript实现一个拖拽缩放效果

2023-06-30 16:06:14 864人浏览 八月长安
摘要

这篇文章主要介绍“如何使用javascript实现一个拖拽缩放效果”,在日常操作中,相信很多人在如何使用JavaScript实现一个拖拽缩放效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用JavaS

这篇文章主要介绍“如何使用javascript实现一个拖拽缩放效果”,在日常操作中,相信很多人在如何使用JavaScript实现一个拖拽缩放效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用JavaScript实现一个拖拽缩放效果”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

先来看一下我们要是实现一个怎样的效果

如何使用JavaScript实现一个拖拽缩放效果

基本思路

  • 鼠标摁下,记录元素的初始位置以及宽高

  • 监听鼠标的移动,根据鼠标的移动不断改变自己的位置/宽高

  • 是否存在边界限制

拖拽实现

我们常见的改变元素位置的方式有

  • 定位

  • 使用translate进行偏移

那我们现在用那种方式那实现拖拽呢?
从功能实现上来看,这两个方式都能很好的实现我们的需求
从性能上来看,translate天生就是用来制作动画效果的,所以translate的性能以及流畅度都是要优于定位的。
开始操作!!

<style>  .box{    margin: 50px;    width: 500px;    height: 300px;    border: 1px solid black;    position: relative;  }  .drag{    height: 100px;    width: 100px;    background-color: #cbd;  }</style><div class="box">  <div class="drag"></div></div><script>  let dragEl = document.querySelector(".drag")  let container = document.querySelector(".box")  let width, height, maxWidth, maxHeight, tx, ty, startX, startY  // 初始化  function init() {    // 为目标元素设置初始的偏移,避免在第一次获取偏移时为空的问题    dragEl.style.transfORM = "translate(0px,0px)"    // 获取父元素宽高    maxWidth = container.clientWidth    maxHeight = container.clientHeight  }  function getInfo(e) {      // 获取元素当前的宽高      width = dragEl.clientWidth      height = dragEl.clientHeight      // 获取元素当前的偏移量      let translateStr = dragEl.style.transform      const reg = /\d+/g      let translateArr = translateStr.match(reg)      tx = Number(translateArr[0])      ty = Number(translateArr[1])      // 记录鼠标的起始位置      startX = e.clientX      startY = e.clientY    }  function  drag() {    dragEl.addEventListener("mousedown", (e) => {      getInfo(e)      document.onmousemove = (e) => {        let distanceX = tx + e.clientX - startX        let distanceY = ty + e.clientY - startY        dragEl.style.transform = `translate(${distanceX}px, ${distanceY}px)`      }      document.onmouseup = () => {        document.onmousemove = null      }    })  }  init()  drag()</script>

通过上述代码,我们已经完成了元素的拖动,接下来需要考虑的就是,如果有边界限制,我们又该如何实现
从上诉例子中,我们可以观察出,元素偏移的最小值为0,最大值为父元素的宽高 - 目标元素的宽高
所以在有边界限制的情形下偏移量的计算方式为

let distanceX = Math.max(0, Math.min(tx + e.clientX - startX, maxWidth - width))let distanceY = Math.max(0, Math.min(ty + e.clientY - startY, maxHeight - height))

缩放实现

这里我们以向左缩放为例

  • 首先我们需要为目标元素添加一个边框,用来进行缩放的操作

<style>  .box{    margin: 50px;    width: 500px;    height: 300px;    border: 1px solid black;    position: relative;  }  .drag{    height: 100px;    width: 100px;    background-color: #cbd;  }  .left{    width: 10px;    height: calc(100% - 14px);    margin: 7px 0px;    position: absolute;    background-color: #000;    cursor: col-resize;    top: 0;    left: -5px;  }</style><script>function addLeft() {  left = document.createElement("div")  left.className = "left"  dragEl.append(left)}init()drag()addLeft()</script>

为左侧的边框添加缩放功能,因为是左侧的缩放,所以在宽度变化的同时,需要不断调整元素的位置,令其符合视觉效果

function leftZoom() {  left.addEventListener("mousedown", (e) => {    e.stopPropagation()    getInfo(e)    document.onmousemove = (e) => {      // 注意这里是➖      newWidth = width - (e.clientX - startX)      let distanceX = tx + (e.clientX - startX)      dragEl.style.width = `${newWidth}px`      dragEl.style.transform = `translate(${distanceX}px, ${ty}px)`    }    document.onmouseup = () => {      document.onmousemove = null    }  })}init()drag()addLeft()leftZoom()
  • 限制元素缩放的最小值

let minWidth = 30newWidth = Math.max(minWidth, width - (e.clientX - startX))
  • 现在我们已经完成了缩放,但是当元素向右缩小到最小值时,元素会向右移动,显然这是不符合逻辑的,所以我们需要对偏移进行限制

// 最大偏移为已经偏移的距离 + 目标元素的宽度 - 最小宽度let distanceX = Math.min(tx + width - minWidth, tx + (e.clientX - startX))

如果缩放的尺寸需要限制在父元素内,我们需要继续完善代码

// 最大宽度为元素当前偏移量 + 最初的宽度,最小宽度为minWidthnewWidth = Math.min(tx + width, Math.max(minWidth, width - (e.clientX - startX)))// 最大偏移为已经偏移的距离 + 目标元素的宽度 - 最小宽度,最小偏移为0let distanceX = Math.max(0,Math.min(tx + width - minWidth, tx + (e.clientX - startX)))

到此,关于“如何使用JavaScript实现一个拖拽缩放效果”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: 如何使用JavaScript实现一个拖拽缩放效果

本文链接: https://www.lsjlt.com/news/330077.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用JavaScript实现一个拖拽缩放效果
    目录前言基本思路拖拽实现缩放实现最后前言 在写一个简单的H5页面时,需要实现如下的一个拖拽效果,找了半天未能找到符合要求的,含泪手写先来看一下我们要是实现一个怎样的效果 基本思路 ...
    99+
    2022-11-13
  • 如何使用JavaScript实现一个拖拽缩放效果
    这篇文章主要介绍“如何使用JavaScript实现一个拖拽缩放效果”,在日常操作中,相信很多人在如何使用JavaScript实现一个拖拽缩放效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用JavaS...
    99+
    2023-06-30
  • 如何用js实现一个拖拽效果
    这篇文章主要介绍“如何用js实现一个拖拽效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何用js实现一个拖拽效果”文章能帮助大家解决问题。.markdown-body{word-break:br...
    99+
    2023-07-05
  • 如何使用JavaScript实现拖拽效果
    这篇文章主要介绍如何使用JavaScript实现拖拽效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!拖拽在前端开发中是很常见的功能,也是基本功之一,本文是不限制范围的拖拽也就是最简...
    99+
    2022-10-19
  • JavaScript如何实现九宫格拖拽效果
    这篇文章主要介绍“JavaScript如何实现九宫格拖拽效果”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“JavaScript如何实现九宫格拖拽效果”文章能帮助大家解决问题。代码如下:<!DO...
    99+
    2023-07-02
  • 手把手教你用js实现一个拖拽效果
    .markdown-body{word-break:break-word;line-height:1.75;font-weight:400;font-size:15px;overflow-x:hidden;color:#333}.markd...
    99+
    2023-05-14
    拖拽 javascript
  • 如何使用Vue.js实现拖放效果
    这篇“如何使用Vue.js实现拖放效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用Vue.js实现拖放效果”文章吧...
    99+
    2023-07-04
  • 如何使用原生js实现可拖拽效果
    这篇文章主要介绍如何使用原生js实现可拖拽效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:代码如下:<!DOCTYPE html> <html&...
    99+
    2022-10-19
  • 使用iframe怎么实现一个移动端缩放效果
    今天就跟大家聊聊有关使用iframe怎么实现一个移动端缩放效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。这是我习惯用的meta头部,使页面宽度根据设备宽度自适应变化<met...
    99+
    2023-06-09
  • 如何使用Vue实现一个简单的鼠标拖拽滚动效果插件
    这篇文章主要介绍了如何使用Vue实现一个简单的鼠标拖拽滚动效果插件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 演示事例最近在做...
    99+
    2022-10-19
  • 如何使用纯CSS实现鼠标点击拖拽效果
    这篇文章主要介绍“如何使用纯CSS实现鼠标点击拖拽效果”,在日常操作中,相信很多人在如何使用纯CSS实现鼠标点击拖拽效果问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何使用纯CSS实现鼠标点击拖拽效果”的疑...
    99+
    2023-07-04
  • 如何使用Python+OpenCV实现拖拽虚拟方块效果
    本篇内容主要讲解“如何使用Python+OpenCV实现拖拽虚拟方块效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Python+OpenCV实现拖拽虚拟方块效果”吧!一、核心流程op...
    99+
    2023-07-06
  • HTML5中如何实现拖放效果无须借助javascript
    这篇文章给大家分享的是有关HTML5中如何实现拖放效果无须借助javascript的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 先看html核心代码: <div>...
    99+
    2022-10-19
  • 如何使用CSS实现图片的缩放效果
    如何使用CSS实现图片的缩放效果在网页设计中,图片的缩放效果是常见的需求之一。通过CSS的相关属性和技巧,我们可以轻松地实现图片的缩放效果。下面,将为大家详细介绍如何使用CSS来实现图片的缩放效果,并给出具体的代码示例。使用transfor...
    99+
    2023-11-21
    图片缩放 CSS缩放 CSS图片效果
  • 怎么在Android中利用ScrollView 实现一个伸缩放大效果
    这篇文章给大家介绍怎么在Android中利用ScrollView 实现一个伸缩放大效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。核心的控件就是下面的这段代码:package com.kokjuis.tra...
    99+
    2023-05-31
    android scrollview roi
  • 如何使用Vue3实现一个飘逸元素拖拽功能
    这篇文章主要介绍了如何使用Vue3实现一个飘逸元素拖拽功能的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用Vue3实现一个飘逸元素拖拽功能文章都会有所收获,下面我们一起来看看吧。推荐几个好用的工具var-...
    99+
    2023-07-05
  • 使用JavaScript怎么实现一个弹框效果
    本篇文章为大家展示了使用JavaScript怎么实现一个弹框效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。利用display来控制弹窗的现实和隐藏<!-- 弹出层 --...
    99+
    2023-06-14
  • 使用JavaScript怎么实现一个日历效果
    这篇文章给大家介绍使用JavaScript怎么实现一个日历效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java是什么Java是一门面向对象编程语言,可以编写桌面应用程序、Web应用程序、分布式系统和嵌入式系统应用...
    99+
    2023-06-07
  • 如何使用jquery实现拖拉效果
    这篇文章给大家分享的是有关如何使用jquery实现拖拉效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用jquery实现拖拉效果的方法:1、使用“$("#元素id值...
    99+
    2022-10-19
  • 如何使用原生JavaScript实现放大镜效果
    这篇文章主要介绍了如何使用原生JavaScript实现放大镜效果的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用原生JavaScript实现放大镜效果文章都会有所收获,下面我们一起来看看吧。需求列表鼠标进...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作