Как убрать горизонтальную полосу прокрутки с слика. js - PullRequest
0 голосов
/ 24 апреля 2020

Я реализовал один слайдер с помощью Slick. js. Это работает, но показывает горизонтальную полосу прокрутки, и я не могу найти, как это исправить.

Я пробовал с overflow:hidden и box-sizing: border-box;, но не работал. Не могли бы вы помочь мне избавиться от горизонтальной полосы прокрутки?

Скрипт и css прилагается ниже

(function(ng, $) {
	'use strict';

	ng.module('cfrRefugeeApp').directive('slider',slider);
	slider.$inject = ['App.config','$timeout','$window','$rootScope'];

	function slider(AppConfig, $timeout,$window,$rootScope) {
		return {
			restrict: 'A',
			scope: {
		       item: '='
		    },
			link: function(scope, element, attr) {
				var $el = ng.element(element);

				var itemId = attr.itemid;
				var itemType = attr.itemtype;
				var sectionId = attr.sectionid;
				var $sliderEl;
				var $slideshow, $slider, $scrollindicator;
				var height, top, bottom;
				var scrollY;
				var currentSlideNum = 0;
				var currentSection = undefined;
				var active = false;
				var isTouch = AppConfig.isTouchDevice;
				var $header, $line;
				var init = false;
				var built = false;
				var dimensionsSet = false;
				var noChangeCountToEnd = 100;
				var w = ng.element($window);
				var viewportHeight = window.innerHeight || w.height();
				var animate = false;
				var waitingToAnimate = false;
				var triggerItem = undefined;
				var triggerNum = undefined;

				
				var setElem = function(){
					$sliderEl = $el.find('.slider-el');
					setResolutions();
          			setSlideshow();
				}

				var resolutionsState = function(slick){
					if(slick.currentSlide == 0){
						if($header && $header.hasClass('dragged')) $header.removeClass('dragged');
						if($line && $line.hasClass('wider')) $line.removeClass('wider'); 
						slick.$prevArrow.fadeOut();

					}else{
						if($line && !$line.hasClass('wider')) $line.addClass('wider');
						slick.$prevArrow.fadeIn();
						
					}
					if(slick.currentSlide == slick.slideCount - 1){
						slick.$nextArrow.fadeOut();
					}else{
						slick.$nextArrow.fadeIn();
					}
				}

				var setResolutions = function(){
		          if(itemType == 'resolutions'){
		           	$header = $el.find('.resolution-head');
		           	$line = $el.find('.resolution-line');

		            $slider = $sliderEl.slick({
		              arrows: true,
		              slidesToScroll: 2,
		              variableWidth: true,
		              infinite: false,
  					  cssEase: 'cubic-bezier(0.165, 0.84, 0.44, 1)',
  					  speed: 800,
  					  responsive: [
  					  	{
  					  		breakpoint: 1280,
							settings: {
								slidesToScroll: 1
							}
  					  	}
  					  ],
		              nextArrow: '<div class="resolution-drag next"><svg viewBox="0 0 11 18" xmlns:xlink="http://www.w3.org/1999/xlink"> <g fill-rule="nonzero" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="square"> <polyline points="2 2 8.25418658 8.75198312 2 15.5"></polyline> </g> </svg></div>',
		              prevArrow: '<div class="resolution-drag previous"><svg viewBox="0 0 11 18" xmlns:xlink="http://www.w3.org/1999/xlink"> <g fill-rule="nonzero" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="square">  <polyline points="9.74581342 3 3 9.75198312 9.74581342 16.5"></polyline> </g> </svg></div>',
		            }).on('swipe', function(event, slick, direction){
		            	
		              	resolutionsState(slick);
		            })
		            .on('afterChange', function(event, slick, currentSlide){
		              
		            	resolutionsState(slick);
		            })
		            .on('beforeChange', function(event, slick, currentSlide){

		              	if($header && !$header.hasClass('dragged')) $header.addClass('dragged');

		            });
		          }
		        }



		        var setSlideshow = function(){
		          if(itemType == 'slideshow'){
		            var $parent = $el.parent();

		            $scrollindicator = $parent.find('.slider-scrollindicator');

		            $sliderEl.on('init', function(){
		            	intervalResize();
		            	console.log('slick init');
		            });

		            $slideshow = $sliderEl.slick({
		              arrows: false,
		              slidesToShow: 1,
		              infinite: false,
		              draggable: false,
		              dots: isTouch,
  					  cssEase: 'cubic-bezier(0.165, 0.84, 0.44, 1)',
  					  speed: 1000
		            });

		            $sliderEl.on('afterChange', function(event, slick, currentSlide){
		            	animate = false;
		            	
		            });
		            $parent.find('.slider-skip').on('click', function(){
		            	window.scrollTo(0, bottom);
		            });
		          }
		        }

		        var checkAnimate = function(){
		        	if(!animate){
		        		$sliderEl.slick('slickGoTo', currentSlideNum);
		        	}else{
			        	$timeout(function(){
			        		checkAnimate();
			        	}, 200);
			        }
		        }

		        /* resize */
		        var intervalResize = function(){
		          var interval,
		            timeout,
		            end,
		            lastTop,
		            lastBottom,
		            lastHeight,
		            noChangeCount;
		          dimensionsSet = false;

		            end = function () {
		               
		                clearInterval(interval);

		                interval = null;
		                timeout = null;
		                dimensionsSet = true;
		                onResize();
		                
		            };

		            interval = setInterval(function () {
		                setTopBottom();
		                if (top === lastTop && height === lastHeight && bottom === lastBottom) {
		                    noChangeCount++;

		                    if (noChangeCount === noChangeCountToEnd) {
		                        // The interval resolved the issue first.
		                        //if(itemNum == 20) console.log('interval end '+ height);
		                        end();
		                    }
		                } else {
		                    lastTop = top;
		                    lastBottom = bottom;
		                    lastHeight = height;
		                    noChangeCount = 0;
		                }
		            },1);
		        }

		        var setTopBottom = function(){
		          if(!scrollY) scrollY = 0;
		          // var rect = $el[0].getBoundingClientRect();
		          // top = rect.top + scrollY;
		          // height = $el.outerHeight();
		          // bottom = top + height;
		          height = $el.outerHeight();
        		  top = $el.offset().top;
        		  bottom = top + height;
		        }

		        var onResize = function(){
		            checkVisible();
		        }

		        var checkVisible = function(){
		        	if(scrollY > top && scrollY < bottom - viewportHeight){
	        			var percentScrolled = (scrollY - top)/(height - viewportHeight);

	        			// var num = Math.round(percentScrolled * 8);

        				// if(num !== currentSlideNum){
	        			// 	currentSlideNum = num;
	        			// 	if(!animate){
	        			// 		animate = true;
	        			// 		$sliderEl.slick('slickGoTo', currentSlideNum);
	        			// 	}else{
	        			// 		checkAnimate();
	        			// 	}
	        				
	        			// }
	        			
	        			$scrollindicator.css('transform', 'scaleX('+ percentScrolled +')');
	        		}
		        }

		        var setActive = function(){
		        	active = true;
		        	if(!built){
						setElem();
						built = true;
					}else{
						if(!isTouch && itemType == 'slideshow') intervalResize();
					}
		        }

		        var getItemDetails = function(id){
		        	var arr = id.split('-');
		        	triggerItem = arr[0] + arr[1];
		        	triggerNum = parseInt(arr[2].substr(-1), 10);
		        }

		        var checkTrigger = function(id){
		        	if(itemType == 'slideshow' && built){
		        		getItemDetails(id);
		        		if(triggerItem = itemId){
		        			if(currentSlideNum !== triggerNum){
		        				currentSlideNum = triggerNum;
		        				if(!animate){
		        					animate = true;
		        					$sliderEl.slick('slickGoTo', currentSlideNum);
		        				}else{
		        					checkAnimate();
		        				}
		        			}
		        		}
		        	}
		        }


		        /* LISTENING TO EVENTS ----------------------------------------- */

				scope.$on('sectionItem::active', function($event, args) {
					currentSection = args.sectionId;
		          	if (init && currentSection == sectionId) {
						setActive();
					}else{
						active = false;
					}
		        });

				scope.$on('winEvents::scroll', function($event, args){
					scrollY = args.scrollY;
		        	if(!isTouch && itemType == 'slideshow' && active) checkVisible();
		        });

		        scope.$on('winEvents::resize', function($event, args){
		        	viewportHeight = args.height;
		        	if(!isTouch && itemType == 'slideshow' && active) intervalResize();
		        });
		        

		        scope.$on('triggerItem::inview', function($event, args) {
		        
			    	
			    		
		        		checkTrigger(args.triggerId);

		       
			        
			    });


				/* TIMEOUTs ----------------------------------------- */

		        $timeout(function() {
		          	init = true;

		          	if(currentSection == undefined){
						$rootScope.$broadcast('slider::init');
					}else if(currentSection == sectionId){
						setActive();
					} 
		        }, 500);

			}
		};
	}
})(angular, jQuery);
/* Slider */

.slick-slider {
    position: relative;
    display: block;
    box-sizing: border-box;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    -ms-touch-action: pan-y;
    touch-action: pan-y;
    -webkit-tap-highlight-color: transparent;
}
.slick-list {
    position: relative;
    overflow: hidden;
    display: block;
    margin: 0;
    padding: 0;

    &:focus {
        outline: none;
    }

    &.dragging {
        cursor: pointer;
        cursor: hand;
    }
}
.slick-slider .slick-track,
.slick-slider .slick-list {
    -webkit-transform: translate3d(0, 0, 0);
    -moz-transform: translate3d(0, 0, 0);
    -ms-transform: translate3d(0, 0, 0);
    -o-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
}

.slick-track {
    position: relative;
    left: 0;
    top: 0;
    display: block;
    margin-left: auto;
    margin-right: auto;

    &:before,
    &:after {
        content: "";
        display: table;
    }

    &:after {
        clear: both;
    }

    .slick-loading & {
        visibility: hidden;
    }
}
.slick-slide {
    float: left;
    height: 100%;
    min-height: 1px;
    [dir="rtl"] & {
        float: right;
    }
    img {
        display: block;
    }
    &.slick-loading img {
        display: none;
    }

    display: none;

    &.dragging img {
        pointer-events: none;
    }

    .slick-initialized & {
        display: block;
    }

    .slick-loading & {
        visibility: hidden;
    }

    .slick-vertical & {
        display: block;
        height: auto;
        border: 1px solid transparent;
    }
}
.slick-arrow.slick-hidden {
    display: none;
}

.slick-dots {
    position: absolute;
    bottom: 10px;
    display: block;
    width: 100%;
    padding: 0;
    margin: 0;
    list-style: none;
    text-align: center;
}

.slick-dots li
{
    position: relative;

    display: inline-block;

    width: 6px;
    height: 6px;
    margin: 0 5px;
    padding: 0;

    cursor: pointer;
}
.slick-dots li button
{
    font-size: 0;
    line-height: 0;

    display: block;

    width: 6px;
    height: 6px;
    padding: 5px;

    cursor: pointer;

    color: transparent;
    border: 0;
    outline: none;
    background: transparent;
}
.slick-dots li button:hover,
.slick-dots li button:focus
{
    outline: none;
}
.slick-dots li button:hover:before,
.slick-dots li button:focus:before
{
    opacity: 1;
}
.slick-dots li button:before
{
    position: absolute;
    top: 0;
    left: 0;

    width: 6px;
    height: 6px;
    border-radius: 50%;

    content: '';
    background: #000;
    text-align: center;

    opacity: .25;

    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
.slick-dots li.slick-active button:before
{
    opacity: .75;
    color: black;
}
...