1
I have a problem regarding the click of touch whether he is still on top of the element or not (in this case the mouseleave) I modified a code already posted on the Problem capturing element position when there is a scroll in jQuery and thanks in solution, see the modified code:
$(document).ready(function() {
var $origin = $('.md-tab>li'),
$activates = $('.md-tab>.slider'),
whatTab = $origin.outerWidth(),
howFar;
if (!$activates.length) {
return;
}
$activates.css("width", whatTab);
$origin.each(function(index, element) {
var $element = $(element);
$element.find('a').addClass('ripple');
});
$origin.on('touchend click', function(e) {
e.stopPropagation();
e.preventDefault();
var $this = $(this);
whatTab = $this.outerWidth();
howFar = $this.position().left + $this.parent().scrollLeft();
$activates.css({
'left': howFar - $(window).scrollLeft(),
'width': whatTab
})
$this.parent().animate({
'scrollLeft': howFar - ($this.parent().width() / 2)
}, 500, 'easeInOutExpo');
});
});
ul.md-tab {
position: relative;
padding: 0;
white-space: nowrap;
overflow-x: auto;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
-ms-box-shadow: 0 2px 5px rgba(0, 0, 0, .16), 0 2px 10px rgba(0, 0, 0, .12);
-o-box-shadow: 0 2px 5px rgba(0, 0, 0, .16), 0 2px 10px rgba(0, 0, 0, .12);
box-shadow: 0 2px 5px rgba(0, 0, 0, .16), 0 2px 10px rgba(0, 0, 0, .12);
}
ul.md-tab > li {
position: relative;
display: inline-block;
height: 60px;
}
ul.md-tab > li > a {
position: relative;
display: inline-block;
overflow: hidden;
text-decoration: inherit;
text-transform: uppercase;
text-align: center;
letter-spacing: .01em;
font-weight: 500;
height: 60px;
line-height: 61px;
margin-bottom: -8px;
padding-left: 1.3em;
padding-right: 1.3em;
}
ul.md-tab > li.slider {
position: absolute;
display: block;
bottom: 0;
left: 0;
height: 4px;
pointer-events: none;
background-color: #ffeb3b;
-webkit-transition: all 0.5s;
-moz-transition: all 0.5s;
-ms-transition: all 0.5s;
-o-transition: all 0.5s;
transition: all 0.5s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://gsgd.co.uk/sandbox/jquery/easing/jquery.easing.1.3.mine.js"></script>
<nav class="nav" id="nav" data-color="cyan">
<ul class="md-tab">
<li><a href="#!">Início</a>
</li>
<li><a href="#!">Card</a>
</li>
<li><a href="#!">Typography</a>
</li>
<li><a href="#!">Tables</a>
</li>
<li><a href="#!">Form</a>
</li>
<li><a href="#!">User Interface</a>
</li>
<li class="slider"></li>
</ul>
</nav>
The problem is this, when I use the touch of a mobile to roll the scroll works but it is when loose it goes and activates the effect $this.parent().animate of click on the element and I imagine that the touchend would be like the mouseup, in this case I wanted to know if it is possible to apply a test such as mouseleave but in touch asking if he is on top of the element and if he is applying the effect.
Thank you very much for the example but I noticed a bug in which the
scrolling = false;was not inserting and I added it into theif, thus:if (scrolling) { scrolling = false; return; }and it worked.– iLeonardo Carvalho