jQuery UI Sortable을 사용하여 올바르게 교차하는 방법은 무엇입니까?

괴롭히다

다음은 jQuery UI Sortable 애니메이션을 시도한 것입니다.
https://codepen.io/anon/pen/YdMOXE

var startIndex, changeIndex, uiHeight;

$('ul').sortable({
    'placeholder': 'marker',
    start: function(e, ui) {

        startIndex = ui.placeholder.index();
        uiHeight = ui.item.outerHeight(true);//get offset incl margin

        ui.item.nextAll('li:not(.marker)').css({
            transform: 'translateY(' +uiHeight+ 'px)'
        });

        ui.placeholder.css({
            height: 0,
            padding: 0
        });
    },
    change: function(e, ui) {

        changeIndex = ui.placeholder.index();


        if (startIndex > changeIndex) {

            var slice = $('ul li').slice(changeIndex, $('ul li').length);

            slice.not('.ui-sortable-helper').each(function() {
                var item = $(this);
                item.css({
                    background:'lightcoral',
                    transform: 'translateY(' +uiHeight+ 'px)'
                });
            });

        } else if (startIndex < changeIndex) {

            var slice = $('ul li').slice(startIndex, changeIndex);

            slice.not('.ui-sortable-helper').each(function() {
                var item = $(this);
                item.css({
                    background: 'lightgreen',
                    transform: 'translateY(0px)'
                });
            });
        }

        startIndex = changeIndex
    },
    stop: function(e, ui) {
        $('.ui-sortable-handle').css({
            background: 'lightblue',
            transform: 'translateY(0)'
        })
    }
});

불행히도 .NET과 안정적으로 작동하지 않습니다 tolerance: intersect. ( 50%요소가 겹칠 때 변경하기 위해 정렬 ). 포인터 위치를 통해서만 정렬하고 싶은 것 같습니다. 이것을 보여주는 비디오가 첨부되어 있습니다. https://gfycat.com/WatchfulPresentHedgehog

교차로 올바르게 작동하려면 어떻게해야합니까?

바라타

버그 # 8342를 볼 수 있습니다.

정렬 가능 : 정렬 가능한 옵션의 잘못된 동작 (또는 잘못된 문서) tolerance: 'intersect'

나는 Munim Munna 주석에 링크 된 ( 이 답변 (수직 사용을 위해 수정했습니다) 및 이 답변 에서) 현재 해결 방법을 테스트 했으며 두 해결 방법 모두 올바르게 작동하지 않습니다 (매우 버그가 있음).

해결 방법 tolerance: 'pointer'

(드래그 가능한 요소의 너비와 높이의 절반 크기) tolerance: 'pointer'와 함께 설정해야합니다 cursorAt: {top: height/2, left: width/2}.

tolerance : 'pointer'옵션을 사용하면 커서가 대상 요소에 들어가는 즉시 요소가 대상 요소를 대체 할 수 있습니다. 기본적으로 tolerance : 'intersect'항목이 다른 항목과 50 % 이상 겹치는 것으로 설정되어 있습니다. 그러나 불행히도이 옵션에 대한 버그가 있습니다 (내 답변의 상단 참조).

cursorAt옵션 과 함께 또는 옵션 없이 사용 하거나 값을 변경하십시오. 이 옵션은 정렬 요소 또는 도우미를 이동하여 커서가 항상 같은 위치에서 드래그되는 것처럼 보입니다. 좌표는 하나 또는 두 개의 키 조합을 사용하여 해시로 제공 될 수 있습니다 {top, left, right, bottom}..

여기에 대한 설명서입니다 tolerance옵션 및 대한 cursorAt옵션 .

29.01.2019에서 업데이트

jQuery UI Sortable에서 몇 가지 버그를 수정했습니다. 마지막 항목에서 드래그 할 때 이동하기에 충분한 공간이없는 경우. 이 코드를 추가하여이 버그를 수정했습니다.

<div style="clear: both; line-height: 500px">&nbsp;</div>

정렬 가능한 요소 바로 뒤에.

var startIndex, changeIndex, uiHeight,
    bRect = $("ul li")[0].getBoundingClientRect(),
    width = bRect.right - bRect.left,
    height = bRect.bottom - bRect.top;

$('ul').sortable(
{
    tolerance: 'pointer',
    cursorAt: {top: height/2, left: width/2}, //try to use it with and without this option
    'placeholder': 'marker',
    start: function(e, ui)
    {
        startIndex = ui.placeholder.index();
        uiHeight = ui.item.outerHeight(true); //get offset incl margin

        ui.item.nextAll('li:not(.marker)').css({
            transform: 'translateY(' + uiHeight + 'px)'
        });
        ui.placeholder.css({height:0, padding:0});
    },

    change: function(e, ui)
    {
        changeIndex = ui.placeholder.index();

        if(startIndex > changeIndex)
        {
            var slice = $('ul li').slice(changeIndex, $('ul li').length);

            slice.not('.ui-sortable-helper').each(function()
            {
                var item = $(this);
                item.css({
                    background:'lightcoral',
                    transform: 'translateY(' +uiHeight+ 'px)'
                });
            });
        }
        else if(startIndex < changeIndex)
        {
            var slice = $('ul li').slice(startIndex, changeIndex);
            slice.not('.ui-sortable-helper').each(function()
            {
                var item = $(this);
                item.css({
                    background: 'lightgreen',
                    transform: 'translateY(0px)'
                });
            });
        }

        startIndex = changeIndex
    },

    stop: function(e, ui)
    {
        $('.ui-sortable-handle').css({
            background: 'lightblue',
            transform: 'translateY(0)'
        })
    }
});
body{color:white; font-family:Helveticasans-serif; padding:10px}
ul{float:left; width:300px; border-radius:6px}
ul:after{clear:both; content:''; display:table}
li
{
    background: lightblue;
    display: block;
    position: relative;
    padding: 80px 6px;
    z-index: 1;
    margin: 5px 20px;
    overflow: hidden;
    transition: transform .2s
}
.marker{opacity:0.0; transition:.2s height}
.ui-sortable-helper{transform:scale(.9)}
<br><br>
<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
</ul>
<!--
Fixing some bugs from jQuery UI Sortable:
on dragging from last item if after it
it has not enough space for moving
-->
<div style="clear: both; line-height: 500px">&nbsp;</div>
<!--END of Fixing bugs-->
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>

전체 페이지에서이 코드 스 니펫을 보는 것이 더 유용합니다 (스 니펫 오른쪽 상단의 링크 사용).

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados

scikit-learn에서 교차 검증을 올바르게 수행하는 방법은 무엇입니까?

클래스 속성을 사용하여 조건을 올바르게 만드는 방법은 무엇입니까?

Java Apache HttpClient를 사용하여 POST 요청을 올바르게 만드는 방법은 무엇입니까?

Array [String]을 올바르게 반복하는 방법은 무엇입니까?

Assert :: ExpectException을 올바르게 호출하는 방법은 무엇입니까?

Django에 URL을 올바르게 저장하는 방법은 무엇입니까?

hashSet을 올바르게 사용하는 방법은 무엇입니까? (C ++에서 자바로 이동)

Record <>에서 확장되는 인터페이스의 교차점을 올바르게 입력하는 방법은 무엇입니까?

EnvInject Jenkins 플러그인을 올바르게 사용하는 방법은 무엇입니까?

Hibernate @Index 주석을 올바르게 사용하는 방법은 무엇입니까?

지도에서 자리 표시 자 구문을 올바르게 사용하는 방법은 무엇입니까?

함수 내에서 time.sleep ()을 올바르게 사용하는 방법은 무엇입니까?

SQL에서 GROUP BY 문을 올바르게 사용하는 방법은 무엇입니까?

hg 공유 확장을 올바르게 사용하는 방법은 무엇입니까?

목록에서 Observable을 올바르게 사용하는 방법은 무엇입니까?

mysql에서 float 유형을 올바르게 사용하는 방법은 무엇입니까?

Rust에서`peek ()`을 올바르게 사용하는 방법은 무엇입니까?

git을 사용하여 GreaseMonkey 사용자 스크립트에서 올바르게 작업하는 방법은 무엇입니까?

.gitignore 파일을 사용하여 git의 파일을 올바르게 무시하는 방법은 무엇입니까?

Retrofit을 사용하여 recyclerView에 더 많은 항목을 올바르게로드하는 방법은 무엇입니까? (코 틀린)

App Engine 인스턴스 용 VPC 방화벽을 올바르게 구성하는 방법은 무엇입니까?

프록시를 올바르게 사용하는 방법은 무엇입니까?

IReadOnlyDictionary를 올바르게 사용하는 방법은 무엇입니까?

stemDocument를 올바르게 사용하는 방법은 무엇입니까?

vscode에 문법 확장을 올바르게 삽입하는 방법은 무엇입니까?

Mongo에서 JsonNode를 올바르게 설정하지만 Java에서 Jackson을 사용하여 String처럼 설정하지 않는 방법은 무엇입니까?

angulafire2를 사용하여 Observable을 올바르게 초기화하고 할당하는 방법은 무엇입니까?

QPixmap을 사각형의 브러시로 올바르게 설정하는 방법은 무엇입니까?

list_append를 올바르게 사용하여 DynamoDB에서 고유 한 값을 유지하는 방법은 무엇입니까?

TOP Lista

CalienteEtiquetas

Archivo