Сначала удалите их:
<permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<permission android:name="android.permission.ACCESS_FINE_LOCATION" />
Те, которые определены платформой, а не вы.
Кроме того, вы не реагируете, когда пользователь на самом деле предоставляет вам разрешения. Запросите разрешения в своей деятельности и не создавайте экземпляр GPSTracker
, пока не получите разрешение. То, что может быть немедленно, если checkSelfPermission()
говорит, что у вас есть разрешение. В противном случае это произойдет, когда действие будет вызвано с помощью onRequestPermissionResult()
.
Сама работа по работе также ошибочна, поскольку вы, кажется, думаете, что сразу получите местоположение, что не будет иметь место большую часть времени.
Вы можете добавить css pointer-events: none
к своей кнопке. Это свойство css отключает все события на элементе. Так что-то вроде этого.
// Slick stuff
...
onAfterChange: function(slide, index) {
if(index === 4) {
$('.slick-next').css('pointer-events', 'none')
}
else {
$('.slick-next').css('pointer-events', 'all')
}
}
И что-то в том же руководстве для элемента .slick-prev
.
В этом решении вы должны получить функцию из конфигурации и только ссылку на него с чем-то вроде этого.
// Inside slick config
onAfterChange: afterChange
// Below somewhere
var afterChange = function(slide, index) { //stuff here }
Также проверьте, есть ли способ получить длину ползунка и проверить его вместо hardcoding 4
в заявлении if
. Возможно, вы можете сделать что-то вроде $('.slide').length
Вот как реализовать функцию afterChange()
.
$(document).ready(function(){
$('.scrollable').slick({
dots: false,
slidesToShow: 1,
slidesToScroll: 3,
swipeToSlide: true,
swipe: true,
arrows: true,
infinite: false,
});
$('.scrollable').on('afterChange', function (event, slick, currentSlide) {
if(currentSlide === 2) {
$('.slick-next').addClass('hidden');
}
else {
$('.slick-next').removeClass('hidden');
}
if(currentSlide === 0) {
$('.slick-prev').addClass('hidden');
}
else {
$('.slick-prev').removeClass('hidden');
}
})
});
И некоторые CSS , Если вы хотите сделать анимацию, вы должны сделать это здесь.
.slick-prev.hidden,
.slick-next.hidden {
opacity: 0;
pointer-events:none;
}
Существует простой способ стилизовать Prev- / Next-Buttons, если достигнут первый или последний элемент. Убедитесь, что для параметра Бесконечный режим установлено значение false. Затем создайте такие кнопки:
.slick-arrow[aria-disabled="true"]{
opacity: .5;
}
Это все, что вам нужно!
Просто используйте infite: false и создайте собственный CSS для класса slick-disabled. Например:
JS - jQuery
$('.my-slider').slick({
infinite: false,
slidesToShow: 1,
slidesToScroll: 1
});
CSS
.slick-disabled {
opacity: 0;
pointer-events:none;
}
Я изменил поведение slick.js прямо так:
// making the prevArrow not show on init:
if (_.options.infinite !== true) {
_.$prevArrow
.addClass('slick-disabled')
.attr('aria-disabled', 'true')
.css('display', 'none'); // The new line of code!
}
И:
if (_.options.arrows === true &&
_.slideCount > _.options.slidesToShow &&
!_.options.infinite
) {
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
_.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
if (_.currentSlide === 0) {
_.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
} else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {
_.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
} else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {
_.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true').css('display', 'none');
_.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false').css('display', '');
}
}
Просто вопрос использования метода jquery .css()
и display
. Кажется, что он работает довольно дурно.
Другой способ сделать это - скользить на один и тот же слайд при прокрутке (предыдущем) на первом слайде или проведите (дальше) на последнем слайде. Используйте swiper метод swiper.SlideTo (n, n, m);
Очень простое решение:
$('.my-slider').slick({
infinite: false });
.slick-disabled {
display: none;
pointer-events:none;
}
, и это все.