> 웹 프론트엔드 > JS 튜토리얼 > 드래그 앤 드롭 효과를 얻기 위해 js를 사용하는 방법을 단계별로 가르쳐주세요.

드래그 앤 드롭 효과를 얻기 위해 js를 사용하는 방법을 단계별로 가르쳐주세요.

藏色散人
풀어 주다: 2023-01-24 08:30:01
앞으로
2814명이 탐색했습니다.

이 기사에서는 프론트 엔드 드래그 앤 드롭 효과 구현에 대한 관련 지식을 제공하며, 멋진 드래그 앤 드롭 효과를 얻기 위해 JS를 사용하는 방법을 주로 소개합니다. 입력 및 레이아웃 방법은 무엇입니까? 관심 있으신 분들은 아래 내용을 살펴보시고 모두에게 도움이 되었으면 좋겠습니다.

머리말

최근에 드래그 효과에 대한 영상을 봤는데 많은 분들이 드래그 효과를 따라하면 효과가 없다는 댓글을 많이 주셨는데요. 무슨 일이 일어나고 있는지 아는 사고 방식은 구현 효과를 연구하고 구현 원리를 이해하는 데 필요합니다. 여기에서는 수익을 창출하는 원리를 검토하겠습니다.

준비

여기서 글꼴 아이콘을 사용하므로 iconfont Alibaba 아이콘 라이브러리에서 직접 가져옵니다

  • 필요한 아이콘을 찾아 프로젝트에 추가하세요
  • 아이콘이 있는 프로젝트를 찾아 링크를 보려면 클릭하세요
  • 주소 복사 , 또는 점프 후 주소를 클릭하여 주소 링크를 복사하세요

드래그 앤 드롭 효과를 얻기 위해 js를 사용하는 방법을 단계별로 가르쳐주세요.

<link>复制代码
로그인 후 복사

필요한 구조를 생성하세요

구조를 먼저 작성해야 합니다

  • 드래그 가능: 상자를 드래그 가능하게 만드세요draggable:让盒子可以进行拖拽
  • style="--color:#e63e31"--color让盒子背景色根据--color显示(与下方css样式相联系)
 <div>        <div>
            <i></i>
            <span>双鱼座</span>
        </div>
        <div>
            <i></i>
            <span>水平座</span>
        </div>
        <div>
            <i></i>
            <span>摩羯座</span>
        </div>
        <div>
            <i></i>
            <span>处女座</span>
        </div>
        <div>
            <i></i>
            <span>狮子座</span>
        </div>
    </div>复制代码
로그인 후 복사

编写样式

这里直接采用flex对盒子进行排版布局

  • background-color: var(--color);var(--color)是或者自定义属性的颜色
body{
  background-color: #000;
}
.list{  width: 300px;  height: 360px;  /* padding: 20px 0; */
  margin: 100px auto 0;  display: flex;
  flex-direction: column;
  justify-content: space-around;
}
.list-item{  width: 100%;  display: flex;
  align-items: center;  padding: 0 16px;
  border-radius: 10px;  /* margin-bottom: 20px; */background-color: var(--color);
}
.constellation{
  line-height: 2.5em;
  font-size: 20px;  color: #fff;
}
.list-item-img{  width: 30px;  height: 30px;
}
.list-item-title{
  margin-left: 20px;  color: #fff;
}// 移动动画class.list-item.moving{
background-color: transparent;border: 2px dashed #ccc;
}复制代码
로그인 후 복사

드래그 앤 드롭 효과를 얻기 위해 js를 사용하는 방법을 단계별로 가르쳐주세요.

js编写拖拽效果

首先获取需要用到的元素

// 获取整个listconst list = document.querySelector('.list')// 获取每一个盒子const item = document.querySelectorAll('.list-item')复制代码
로그인 후 복사

开始拖动的时候需要加上移动的类,并且设置移动效果

// 开始拖动
    list.ondragstart = e => {
        source_node = e.target
        recode(item)        setTimeout(() => {        // 拖拽时样式
            e.target.classList.add('moving')
        }, 0)        // 设置拖动效果
        e.dataTransfer.effectAllowed = 'move'
    }复制代码
로그인 후 복사

拖拽中需要判断是从上往下还是从下往上,根据拖拽元素和放入元素的索引进行比对,从而对拖拽元素进行插入节点操作

注意:码上掘金从上往下的时候会出现bug,在浏览器不会,我个人觉得应该是是码上掘金的问题

 // 拖拽放入有效目标触发
    list.ondragenter = e => {
        e.preventDefault()        console.log(e.target.id, list)        if (e.target === list || e.target === source_node) {            return false
        }        const childer = Array.from(list.children)        const sourceIndex = childer.indexOf(source_node)        const targetIndex = childer.indexOf(e.target)        // console.log(sourceIndex, targetIndex)
        if (sourceIndex <p>拖拽结束后把拖拽时的样式移除</p><pre class="brush:php;toolbar:false">// 拖放结束
    list.ondragend = e => {
        e.target.classList.remove('moving')
    }复制代码
로그인 후 복사

解释方法

这里有好多没有用过或者比较少用的方法,这里给大家解释一下

  • ondragstart:当用户开始拖动一个元素或文本选择时,会触发dragstart事件
  • ondragover:当元素或文本选择被拖到有效的拖放目标上时(每几百毫秒一次),就会触发拖放事件
  • ondragenter:当被拖动的元素或文本选择进入有效的拖放目标时,会触发dragenter事件
  • ondragend: 当拖放操作结束时(通过释放鼠标按钮或点击escape键)触发dragend事件。
  • e.dataTransfer.effectAllowed:用于设置拖放时的效果,常用参数有(move,link,copy)
  • getBoundingClientRect:返回元素对于视口的信息
  • requestAnimationFrame:重绘动画
  • cancelAnimationFrame
  • style="--color:#e63e31"--color는 상자의 배경색을 만듭니다. --color에 따라 표시됩니다(아래 CSS 스타일에 연결됨)

rrreee

스타일 쓰기

여기서 flex는 상자 레이아웃에 직접 사용됩니다 background-color : var(--color);var(--color)는 또는 사용자 정의 속성의 색상

JS 작성 드래그 앤 드롭 효과

먼저 필요한 것을 얻으세요

rrreee

요소가 드래그를 시작하면 이동 클래스를 추가하고 설정해야 합니다 이동 효과

rrreee

드래그하는 동안 드래그된 요소의 인덱스와 배치된 요소를 기준으로 위에서 아래로 또는 아래에서 위로 여부를 판단해야 합니다. 드래그된 요소에 노드를 비교하고 삽입하세요

참고: 위에서 아래로 코드를 Nugging하면 버그가 있지만 브라우저에서는 그렇지 않습니다. 개인적으로 Nuggets 코드에 문제가 있어야 한다고 생각합니다 rrreeeAfter 드래그, 드래그할 때 스타일 제거

rrreee

설명 방법

🎜여기 많이 있나요? 이미 사용되었거나 거의 사용되지 않는 방법은 여기에 설명되어 있습니다🎜🎜🎜ondragstart: 사용자가 요소나 텍스트 선택을 드래그하기 시작하면 dragstart 이벤트가 트리거됩니다.🎜🎜ondragover code>: 요소나 텍스트 선택을 유효한 드래그로 드래그하고 드롭 대상(수백 밀리초마다 한 번씩), 드래그 앤 드롭 이벤트가 트리거됩니다🎜🎜ondragenter: 드래그된 요소가 또는 텍스트 선택이 유효한 드래그 앤 드롭 대상에 들어갈 때 dragenter 이벤트 트리거됨 🎜🎜ondragend: 드래그 앤 드롭 작업이 종료되면(마우스 버튼을 놓거나 Esc 키를 클릭하여) dragend 이벤트가 트리거됩니다. 🎜🎜e.dataTransfer. effectAllowed: 드래그 앤 드롭 시 효과를 설정하는 데 사용됩니다. 공통 매개변수에는 (이동, 링크, 복사)가 포함됩니다. 🎜🎜getBoundingClientRect: 다음에 대한 요소를 반환합니다. 뷰포트 정보 🎜🎜requestAnimationFrame: 애니메이션 다시 그리기 🎜🎜cancelAnimationFrame: requestAnimationFrame 호출 요청을 취소하는 데 사용 🎜🎜🎜모든 코드 🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜🎜 🎜End🎜🎜이 작은 사례를 통해 우리는 드래그 가능 속성을 이해하고 사용할 수 있으며 몇 가지 드래그 방법을 배울 수 있습니다. 모두가 나와 소통하고 함께 배울 수 있습니다. 🎜🎜추천 학습: "🎜JavaScript 비디오 튜토리얼 🎜》🎜🎜

위 내용은 드래그 앤 드롭 효과를 얻기 위해 js를 사용하는 방법을 단계별로 가르쳐주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:juejin.im
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿