Попробуйте этот небольшой плагин jQuery, который я написал, просто для решения проблемы, с которой вы столкнулись:
$(document).ready(function() {
$("#stupid-button").touch(function() {
console.log("The stupid button was pressed!");
});
});
$.fn.touch = function(callback) {
var touch = false;
$(this).on("click", function(e) {
if (!touch) {
console.log("Click detected!");
let callbackReal = callback.bind(this);
callbackReal(this, e);
} else {
touch = true;
}
touch = false;
});
$(this).on("touchstart", function(e) {
$(this).blur();
if (typeof e.touches != typeof undefined) {
e.preventDefault();
touch = true;
console.log("Touch detected!");
let callbackReal = callback.bind(this);
callbackReal(this, e);
}
});
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="stupid-button">Click Me</button>
РЕДАКТ. 1:
Удалено
РЕДАКТ. 2:
Я неправильно понял вопрос.Приведенный выше код по-прежнему полезен для устройств iOS, но вот что вы должны сделать для обработки тегов привязки.Избавьтесь от #id href:
$(document).ready(function() {
$(".anchor").touch(function() {
var targ = $("#" + $(this).data('targ'));
$('html,body').animate({
scrollTop: targ.offset().top
}, 'slow');
});
});
$.fn.touch = function(callback) {
var touch = false;
$(this).on("click", function(e) {
if (!touch) {
console.log("Click detected!");
let callbackReal = callback.bind(this);
callbackReal(this, e);
} else {
touch = true;
}
touch = false;
});
$(this).on("touchstart", function(e) {
$(this).blur();
if (typeof e.touches != typeof undefined) {
e.preventDefault();
touch = true;
console.log("Touch detected!");
let callbackReal = callback.bind(this);
callbackReal(this, e);
}
});
}
#target-ele {
margin-top: 1200px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<a href="javascript:void(0);" class="anchor" id="link-1" data-targ="target-ele">Click Me</a>
<div id="target-ele">
<p>This is the target container</p>
</div>