gpt4 book ai didi

javascript - touchstart 在一个元素上,拖动,touchend 在另一个元素上

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:27:54 26 4
gpt4 key购买 nike

我有一个颜色选择器,可以一次选择两种不同的颜色;它应该像这样工作。触摸第一种颜色 -> 拖动到第二种颜色 -> 在第二种颜色上松开手指。问题是现在当我从屏幕上抬起手指时,touchend 事件会在第一种颜色上触发。不过,它在点击时效果很好。

$('.single-color').on('mousedown touchstart', function(e) {
e.preventDefault();
var index = $(this).attr('data-index');
$('#color1').val(index);
$('#color1').attr('data-color', $(this).css('background-color'));
console.log('touchstart - index: ' + $(this).attr('data-index'));
});

$('.single-color').on('mouseup touchend', function(e) {
e.preventDefault();
var index = $(this).attr('data-index');
$('#color2').val(index);
$('#color2').attr('data-color', $(this).css('background-color'));
console.log('touchend - index: ' + $(this).attr('data-index'));
});
.colors {
list-style: none;
margin: 0;
padding: 0;
overflow: hidden;
}

.single-color {
height: 50px;
width: calc(50% - 10px);
margin: 0 5px 5px 5px;
float: left;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="colors">

<li class="single-color" data-color="#4DB023" data-index="0" style="background-color: #4DB023">
&nbsp;
</li>

<li class="single-color" data-color="#1E6B3D" data-index="1" style="background-color: #1E6B3D">
&nbsp;
</li>

<li class="single-color" data-color="#233778" data-index="2" style="background-color: #233778">
&nbsp;
</li>

<li class="single-color" data-color="#3098FF" data-index="3" style="background-color: #3098FF">
&nbsp;
</li>

<li class="single-color" data-color="#FF0000" data-index="4" style="background-color: #FF0000">
&nbsp;
</li>

<li class="single-color" data-color="#38889C" data-index="5" style="background-color: #38889C">
&nbsp;
</li>

<li class="single-color" data-color="#483063" data-index="6" style="background-color: #483063">
&nbsp;
</li>

</ul>

要重现该问题,请查看上面的代码片段,在 Chrome Resposive 工具中将视口(viewport)设置为 iPhone6,以便模拟触摸。

最佳答案

我用这个答案解决了:Get the element under a touchend

var $singleColors = $('.single-color');
$singleColors.on('mousedown touchstart', function(e) {
e.preventDefault();
var index = $(this).attr('data-index');
$singleColors.removeClass('active1');
$(this).addClass('active1');
$('#color1').val(index);
$('#color1').attr('data-color', $(this).css('background-color'));
console.log('touchstart - index: ' + $(this).attr('data-index'));
});

$singleColors.on('mouseup touchmove', function(e) {
e.preventDefault();
var endTarget = document.elementFromPoint(
e.originalEvent.touches[0].pageX,
e.originalEvent.touches[0].pageY
);
var index = $(endTarget).attr('data-index');
$singleColors.removeClass('active2');
$(endTarget).addClass('active2');
$('#color2').val(index);
$('#color2').attr('data-color', $(endTarget).css('background-color'));
console.log('touchend - index: ' + $(endTarget).attr('data-index'));
});
* {
box-sizing: border-box;
}

.colors {
list-style: none;
margin: 0;
padding: 0;
overflow: hidden;
}

.single-color {
height: 50px;
width: calc(50% - 10px);
margin: 0 5px 5px 5px;
float: left;
}

.single-color.active1, .single-color.active2 {
border: 2px solid black;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="colors active2">

<li class="single-color active1" data-color="#4DB023" data-index="0" style="background-color: #4DB023">
&nbsp;
</li>

<li class="single-color" data-color="#1E6B3D" data-index="1" style="background-color: #1E6B3D">
&nbsp;
</li>

<li class="single-color" data-color="#233778" data-index="2" style="background-color: #233778">
&nbsp;
</li>

<li class="single-color" data-color="#3098FF" data-index="3" style="background-color: #3098FF">
&nbsp;
</li>

<li class="single-color" data-color="#FF0000" data-index="4" style="background-color: #FF0000">
&nbsp;
</li>

<li class="single-color active1 active2" data-color="#38889C" data-index="5" style="background-color: #38889C">
&nbsp;
</li>

<li class="single-color" data-color="#483063" data-index="6" style="background-color: #483063">
&nbsp;
</li>

</ul>

注意:此脚本在桌面上不再有效。它仅适用于触摸设备。

关于javascript - touchstart 在一个元素上,拖动,touchend 在另一个元素上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com