grab-n-drag-infinite-carousel 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +121 -0
- package/README.md +493 -0
- package/grab-n-drag-infinite-carousel.css +84 -0
- package/grab-n-drag-infinite-carousel.d.ts +201 -0
- package/grab-n-drag-infinite-carousel.js +945 -0
- package/grab-n-drag-infinite-carousel.min.css +2 -0
- package/grab-n-drag-infinite-carousel.min.js +2 -0
- package/package.json +54 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.infinite-scroll-wrapper{overflow:hidden;position:relative;width:100%}.infinite-scroll-container{align-items:center;cursor:grab;display:flex;position:relative;white-space:nowrap;will-change:transform}.infinite-scroll-item{align-items:center;display:flex;flex-shrink:0}.infinite-scroll-wrapper:after,.infinite-scroll-wrapper:before{content:"";height:100%;pointer-events:none;position:absolute;top:0;width:50px;z-index:1}.infinite-scroll-wrapper:before{background:linear-gradient(90deg,#000,transparent);left:0}.infinite-scroll-wrapper:after{background:linear-gradient(270deg,#000,transparent);right:0}.infinite-scroll-wrapper[data-fade-color]:before{background:var(--fade-gradient-left,linear-gradient(to right,#000,transparent))}.infinite-scroll-wrapper[data-fade-color]:after{background:var(--fade-gradient-right,linear-gradient(to left,#000,transparent))}.infinite-scroll-container:active{cursor:grabbing}@media (max-width:768px){.infinite-scroll-wrapper{overflow:hidden;width:100%}.infinite-scroll-container{min-width:300%}.infinite-scroll-item{flex-shrink:0}}
|
|
2
|
+
/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImdyYWItbi1kcmFnLWluZmluaXRlLWNhcm91c2VsLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSx5QkFFSSxlQUFnQixDQURoQixpQkFBa0IsQ0FFbEIsVUFDSixDQUdBLDJCQUVJLGtCQUFtQixDQUduQixXQUFZLENBSlosWUFBYSxDQUdiLGlCQUFrQixDQURsQixrQkFBbUIsQ0FHbkIscUJBQ0osQ0FHQSxzQkFHSSxrQkFBbUIsQ0FEbkIsWUFBYSxDQURiLGFBR0osQ0FHQSwrREFFSSxVQUFXLENBSVgsV0FBWSxDQUNaLG1CQUFvQixDQUpwQixpQkFBa0IsQ0FDbEIsS0FBTSxDQUNOLFVBQVcsQ0FHWCxTQUNKLENBRUEsZ0NBRUksa0RBQW9FLENBRHBFLE1BRUosQ0FFQSwrQkFFSSxtREFBbUUsQ0FEbkUsT0FFSixDQUdBLGlEQUNJLCtFQUNKLENBRUEsZ0RBQ0ksK0VBQ0osQ0FHQSxrQ0FDSSxlQUNKLENBR0EseUJBQ0kseUJBQ0ksZUFBZ0IsQ0FDaEIsVUFDSixDQUVBLDJCQUVJLGNBQ0osQ0FFQSxzQkFDSSxhQUNKLENBQ0oiLCJmaWxlIjoiZ3JhYi1uLWRyYWctaW5maW5pdGUtY2Fyb3VzZWwubWluLmNzcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBJbmZpbml0ZVNjcm9sbENhcm91c2VsIENTU1xyXG4gKiBcclxuICogTWluaW1hbCBzdHlsZXMgcmVxdWlyZWQgZm9yIHRoZSBpbmZpbml0ZSBzY3JvbGwgY2Fyb3VzZWwgY29tcG9uZW50LlxyXG4gKiBUaGVzZSBzdHlsZXMgaGFuZGxlIG92ZXJmbG93LCBwb3NpdGlvbmluZywgYW5kIGZhZGUgZ3JhZGllbnRzLlxyXG4gKi9cclxuXHJcbi8qIFdyYXBwZXI6IEhhbmRsZXMgb3ZlcmZsb3cgYW5kIGZhZGUgZ3JhZGllbnRzICovXHJcbi5pbmZpbml0ZS1zY3JvbGwtd3JhcHBlciB7XHJcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XHJcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgd2lkdGg6IDEwMCU7XHJcbn1cclxuXHJcbi8qIENvbnRhaW5lcjogVGhlIHNjcm9sbGluZyBlbGVtZW50ICovXHJcbi5pbmZpbml0ZS1zY3JvbGwtY29udGFpbmVyIHtcclxuICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xyXG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcclxuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcclxuICAgIGN1cnNvcjogZ3JhYjtcclxuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XHJcbn1cclxuXHJcbi8qIEl0ZW1zOiBEaXJlY3QgY2hpbGRyZW4gb2YgdGhlIGNvbnRhaW5lciAqL1xyXG4uaW5maW5pdGUtc2Nyb2xsLWl0ZW0ge1xyXG4gICAgZmxleC1zaHJpbms6IDA7XHJcbiAgICBkaXNwbGF5OiBmbGV4O1xyXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcclxufVxyXG5cclxuLyogRmFkZSBncmFkaWVudHMgb24gbGVmdCBhbmQgcmlnaHQgZWRnZXMgKi9cclxuLmluZmluaXRlLXNjcm9sbC13cmFwcGVyOjpiZWZvcmUsXHJcbi5pbmZpbml0ZS1zY3JvbGwtd3JhcHBlcjo6YWZ0ZXIge1xyXG4gICAgY29udGVudDogXCJcIjtcclxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcclxuICAgIHRvcDogMDtcclxuICAgIHdpZHRoOiA1MHB4O1xyXG4gICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XHJcbiAgICB6LWluZGV4OiAxO1xyXG59XHJcblxyXG4uaW5maW5pdGUtc2Nyb2xsLXdyYXBwZXI6OmJlZm9yZSB7XHJcbiAgICBsZWZ0OiAwO1xyXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDEpLCB0cmFuc3BhcmVudCk7XHJcbn1cclxuXHJcbi5pbmZpbml0ZS1zY3JvbGwtd3JhcHBlcjo6YWZ0ZXIge1xyXG4gICAgcmlnaHQ6IDA7XHJcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgcmdiYSgwLCAwLCAwLCAxKSwgdHJhbnNwYXJlbnQpO1xyXG59XHJcblxyXG4vKiBDdXN0b21pemUgZmFkZSBncmFkaWVudCBjb2xvcnMgdXNpbmcgQ1NTIHZhcmlhYmxlcyAqL1xyXG4uaW5maW5pdGUtc2Nyb2xsLXdyYXBwZXJbZGF0YS1mYWRlLWNvbG9yXTo6YmVmb3JlIHtcclxuICAgIGJhY2tncm91bmQ6IHZhcigtLWZhZGUtZ3JhZGllbnQtbGVmdCwgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2JhKDAsIDAsIDAsIDEpLCB0cmFuc3BhcmVudCkpO1xyXG59XHJcblxyXG4uaW5maW5pdGUtc2Nyb2xsLXdyYXBwZXJbZGF0YS1mYWRlLWNvbG9yXTo6YWZ0ZXIge1xyXG4gICAgYmFja2dyb3VuZDogdmFyKC0tZmFkZS1ncmFkaWVudC1yaWdodCwgbGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHJnYmEoMCwgMCwgMCwgMSksIHRyYW5zcGFyZW50KSk7XHJcbn1cclxuXHJcbi8qIEN1cnNvciBzdGF0ZXMgKi9cclxuLmluZmluaXRlLXNjcm9sbC1jb250YWluZXI6YWN0aXZlIHtcclxuICAgIGN1cnNvcjogZ3JhYmJpbmc7XHJcbn1cclxuXHJcbi8qIE1vYmlsZSBvcHRpbWl6YXRpb25zICovXHJcbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xyXG4gICAgLmluZmluaXRlLXNjcm9sbC13cmFwcGVyIHtcclxuICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xyXG4gICAgICAgIHdpZHRoOiAxMDAlO1xyXG4gICAgfVxyXG4gICAgXHJcbiAgICAuaW5maW5pdGUtc2Nyb2xsLWNvbnRhaW5lciB7XHJcbiAgICAgICAgLyogRW5zdXJlIGNvbnRhaW5lciBpcyB3aWRlIGVub3VnaCBmb3Igc21vb3RoIHNjcm9sbGluZyAqL1xyXG4gICAgICAgIG1pbi13aWR0aDogMzAwJTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgLmluZmluaXRlLXNjcm9sbC1pdGVtIHtcclxuICAgICAgICBmbGV4LXNocmluazogMDtcclxuICAgIH1cclxufVxyXG5cclxuIl19 */
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(t){"use strict";function i(i,e){if("string"==typeof i&&(i=document.querySelector(i)),!(i&&i instanceof HTMLElement))throw new Error("InfiniteScrollCarousel: Container element not found");this.container=i,this.options={speed:e&&void 0!==e.speed?e.speed:50,reverseDirection:e&&!0===e.reverseDirection,pauseOnHover:e&&!1!==e.pauseOnHover,responsive:e&&!1!==e.responsive,momentumDecay:e&&void 0!==e.momentumDecay?e.momentumDecay:.95,maxMomentumSpeed:e&&void 0!==e.maxMomentumSpeed?e.maxMomentumSpeed:2,fadeColor:e&&void 0!==e.fadeColor?e.fadeColor:"#ffffff",copies:e&&void 0!==e.copies?e.copies:3,...e},this.validateOptions(),this.isScrolling=!1,this.isPaused=!1,this.isDragging=!1,this.isMomentumActive=!1,this.currentPosition=0,this.animationId=null,this.lastTimestamp=0,this.resetPosition=null,this.totalSetWidth=null,this.isMeasuring=!1,this.originalItemCount=0,this.hasDuplicated=!1,this.dragStartX=0,this.dragStartPosition=0,this.minDragBoundary=0,this.maxDragBoundary=0,this.velocity=0,this.lastDragTime=0,this.lastDragX=0,this.resizeHandler=null,this.resizeDelayTimeout=null,this.lastWidth=t.innerWidth,this.boundHandlers={mouseenter:null,mouseleave:null,mousedown:null,mousemove:null,mouseup:null,mouseleaveWindow:null,touchstart:null,touchmove:null,touchend:null,selectstart:null},this.init()}i.prototype.validateOptions=function(){if(this.options.speed<0){const t=this.options.speed;this.options.speed=Math.abs(this.options.speed),this.options.reverseDirection=!0,console.warn("InfiniteScrollCarousel: Negative speed value "+t+" is deprecated. Use positive speed with reverseDirection: true instead. Speed clamped to "+this.options.speed+" and reverseDirection set to true.")}if(this.options.speed<0&&(this.options.speed=0),this.options.momentumDecay<.5||this.options.momentumDecay>.99){const t=this.options.momentumDecay;this.options.momentumDecay=Math.max(.5,Math.min(.99,this.options.momentumDecay)),console.warn("InfiniteScrollCarousel: momentumDecay value "+t+" is outside valid range (0.5 - 0.99). Clamped to "+this.options.momentumDecay+".")}if(this.options.maxMomentumSpeed<.5||this.options.maxMomentumSpeed>25){const t=this.options.maxMomentumSpeed;this.options.maxMomentumSpeed=Math.max(.5,Math.min(25,this.options.maxMomentumSpeed)),console.warn("InfiniteScrollCarousel: maxMomentumSpeed value "+t+" is outside valid range (0.5 - 25). Clamped to "+this.options.maxMomentumSpeed+".")}if(this.options.copies<3){const t=this.options.copies;this.options.copies=Math.max(3,Math.min(100,this.options.copies)),console.warn("InfiniteScrollCarousel: copies value "+t+" must be greater than or equal to 3. Clamped to "+this.options.copies+".")}},i.prototype.init=function(){"loading"===document.readyState?document.addEventListener("DOMContentLoaded",this.initialize.bind(this)):this.initialize()},i.prototype.initialize=function(){this.applyFadeColor(),this.duplicateItems(),this.setupEventListeners(),setTimeout(function(){this.calculateScrollDistance(function(){this.setInitialPosition(),this.startScrolling()}.bind(this))}.bind(this),50)},i.prototype.colorToRgba=function(t,i){if(void 0===i&&(i=.3),t.startsWith("rgba")){const e=t.match(/rgba?\(([^)]+)\)/);if(e){const t=e[1].split(",").map(function(t){return t.trim()});return"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+i+")"}}if(t.startsWith("rgb")){const e=t.match(/rgb\(([^)]+)\)/);if(e){const t=e[1].split(",").map(function(t){return t.trim()});return"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+i+")"}}if(t.startsWith("#")){3===(t=t.replace("#","")).length&&(t=t.split("").map(function(t){return t+t}).join(""));return"rgba("+parseInt(t.substring(0,2),16)+", "+parseInt(t.substring(2,4),16)+", "+parseInt(t.substring(4,6),16)+", "+i+")"}return t},i.prototype.applyFadeColor=function(){let t=this.container.parentElement;if(!t||!t.classList||!t.classList.contains("infinite-scroll-wrapper")){let i=this.container.parentElement;for(;i&&i!==document.body;){if(i.classList&&i.classList.contains("infinite-scroll-wrapper")){t=i;break}i=i.parentElement}}if(!t)return void console.warn("InfiniteScrollCarousel: Could not find wrapper element");const i=this.colorToRgba(this.options.fadeColor,1);t.style.setProperty("--fade-gradient-left","linear-gradient(to right, "+i+", transparent)"),t.style.setProperty("--fade-gradient-right","linear-gradient(to left, "+i+", transparent)"),t.setAttribute("data-fade-color","")},i.prototype.duplicateItems=function(){if(this.hasDuplicated)return;const t=Array.from(this.container.children);if(0===t.length)return console.warn("InfiniteScrollCarousel: No children found in container"),void(this.originalItemCount=0);this.originalItemCount=t.length;const i=this.options.copies||3;for(let e=1;e<i;e++)t.forEach(function(t){const i=t.cloneNode(!0);this.container.appendChild(i)}.bind(this));this.hasDuplicated=!0},i.prototype.calculateScrollDistance=function(i){if(this.isMeasuring){if(i){const t=setInterval(function(){this.isMeasuring||(clearInterval(t),i())}.bind(this),10)}}else{this.isMeasuring=!0;try{const e=Array.from(this.container.children);if(0===e.length)return this.isMeasuring=!1,void(i&&i());if(!this.originalItemCount||0===this.originalItemCount)return console.warn("InfiniteScrollCarousel: No items to scroll"),this.isMeasuring=!1,void(i&&i());const s=this.originalItemCount,n=this.isScrolling,o=this.currentPosition,r=(this.container.style.transform,this.totalSetWidth);this.isScrolling=!1,this.animationId&&(cancelAnimationFrame(this.animationId),this.animationId=null),this.container.style.transform="translateX(0px)",this.currentPosition=0,this.container.offsetHeight,requestAnimationFrame(function(){let a=0;if(e.length>=2*s){const t=e[0].getBoundingClientRect();a=e[s].getBoundingClientRect().left-t.left}else{const i=t.getComputedStyle(e[0]),n=parseFloat(i.marginRight)||0;for(let t=0;t<s;t++){const i=e[t];if(!i)continue;a+=i.offsetWidth,t<s-1&&(a+=n)}}const h=Math.round(100*a)/100,l=-h;let u=o;if(r&&r!==h&&0!==o){u=o*(h/r),u>=0?u=this.options.reverseDirection?l:0:u<=l&&(u=l)}this.totalSetWidth=h,this.resetPosition=l,this.container.style.transform="translateX("+u+"px)",this.currentPosition=u,this.isScrolling=n,this.container.offsetHeight,this.calculateDragBoundaries(),this.snapToValidPosition(),!n||this.isPaused||this.isDragging||this.isMomentumActive||this.animationId||(this.lastTimestamp=0,this.animate()),this.isMeasuring=!1,i&&i()}.bind(this))}catch(t){console.error("InfiniteScrollCarousel: Error calculating scroll distance:",t),this.isMeasuring=!1,i&&i()}}},i.prototype.setInitialPosition=function(){null!==this.resetPosition&&(this.options.reverseDirection?(this.currentPosition=this.resetPosition,this.container.style.transform="translateX("+this.currentPosition+"px)"):(this.currentPosition=0,this.container.style.transform="translateX(0px)"))},i.prototype.calculateDragBoundaries=function(){null!==this.resetPosition&&(this.minDragBoundary=this.resetPosition,this.maxDragBoundary=0)},i.prototype.setupEventListeners=function(){this.resizeHandler&&t.removeEventListener("resize",this.resizeHandler),this.options.pauseOnHover&&(this.boundHandlers.mouseenter=function(){this.isDragging||this.isMomentumActive||this.pause()}.bind(this),this.boundHandlers.mouseleave=function(){this.isDragging||this.isMomentumActive||this.resume()}.bind(this),this.container.addEventListener("mouseenter",this.boundHandlers.mouseenter),this.container.addEventListener("mouseleave",this.boundHandlers.mouseleave)),this.boundHandlers.mousedown=this.startDragging.bind(this),this.boundHandlers.mousemove=this.handleDrag.bind(this),this.boundHandlers.mouseup=this.endDragging.bind(this),this.container.addEventListener("mousedown",this.boundHandlers.mousedown),document.addEventListener("mousemove",this.boundHandlers.mousemove),document.addEventListener("mouseup",this.boundHandlers.mouseup),this.boundHandlers.mouseleaveWindow=function(){this.isDragging&&this.endDragging()}.bind(this),t.addEventListener("mouseleave",this.boundHandlers.mouseleaveWindow),this.boundHandlers.touchstart=this.startDragging.bind(this),this.boundHandlers.touchmove=this.handleDrag.bind(this),this.boundHandlers.touchend=this.endDragging.bind(this),this.container.addEventListener("touchstart",this.boundHandlers.touchstart,{passive:!1}),document.addEventListener("touchmove",this.boundHandlers.touchmove,{passive:!1}),document.addEventListener("touchend",this.boundHandlers.touchend),this.boundHandlers.selectstart=function(t){t.preventDefault()},this.container.addEventListener("selectstart",this.boundHandlers.selectstart),this.resizeHandler=function(){const i=t.innerWidth;i!==this.lastWidth&&(this.resizeDelayTimeout&&(clearTimeout(this.resizeDelayTimeout),this.resizeDelayTimeout=null),this.resizeDelayTimeout=setTimeout(function(){this.lastWidth=i,this.resizeDelayTimeout=null,this.calculateScrollDistance()}.bind(this),50))}.bind(this),t.addEventListener("resize",this.resizeHandler)},i.prototype.startDragging=function(t){this.isDragging=!0,this.isMomentumActive=!1,this.pause();let i=t.clientX||t.touches&&t.touches[0].clientX;(null==i||isNaN(i))&&(i=0),this.dragStartX=i,this.dragStartPosition=this.currentPosition,this.lastDragTime=Date.now(),this.lastDragX=i,this.velocity=0,this.container.style.cursor="grabbing",t.preventDefault()},i.prototype.handleDrag=function(t){if(!this.isDragging)return;let i=t.clientX||t.touches&&t.touches[0].clientX;if(null==i||isNaN(i)){if(void 0===this.lastDragX||null===this.lastDragX||isNaN(this.lastDragX))return;i=this.lastDragX}const e=Date.now(),s=i-this.dragStartX;if(e>this.lastDragTime&&void 0!==this.lastDragX&&null!==this.lastDragX&&!isNaN(this.lastDragX)){const t=e-this.lastDragTime,s=i-this.lastDragX;t>0&&(this.velocity=s/t,this.velocity=Math.max(-this.options.maxMomentumSpeed,Math.min(this.options.maxMomentumSpeed,this.velocity)))}this.lastDragTime=e,this.lastDragX=i;let n=this.dragStartPosition+s;null!==this.resetPosition&&(n<=this.minDragBoundary?(n=this.maxDragBoundary+(n-this.minDragBoundary),this.dragStartPosition=n,this.dragStartX=i):n>=this.maxDragBoundary&&(n=this.minDragBoundary+(n-this.maxDragBoundary),this.dragStartPosition=n,this.dragStartX=i)),this.currentPosition=n,this.container.style.transform="translateX("+this.currentPosition+"px)",t.preventDefault()},i.prototype.endDragging=function(){if(!this.isDragging)return void this.resume();this.isDragging=!1;const t=null===this.velocity||void 0===this.velocity||isNaN(this.velocity)?0:this.velocity;Math.abs(t)>.01?(this.velocity=t,this.startMomentum()):(this.velocity=0,this.snapToValidPosition(),this.container.style.cursor="grab",this.resume())},i.prototype.startMomentum=function(){this.isMomentumActive=!0,this.container.style.cursor="grab",this.animateMomentum()},i.prototype.animateMomentum=function(){if(this.isMomentumActive){if(this.currentPosition+=16*this.velocity,this.velocity*=this.options.momentumDecay,null!==this.resetPosition&&(this.currentPosition<=this.minDragBoundary?this.currentPosition=this.maxDragBoundary+(this.currentPosition-this.minDragBoundary):this.currentPosition>=this.maxDragBoundary&&(this.currentPosition=this.minDragBoundary+(this.currentPosition-this.maxDragBoundary))),this.container.style.transform="translateX("+this.currentPosition+"px)",Math.abs(this.velocity)<.02)return this.isMomentumActive=!1,this.velocity=0,this.snapToValidPosition(),void this.resume();requestAnimationFrame(this.animateMomentum.bind(this))}},i.prototype.snapToValidPosition=function(){null!==this.resetPosition&&(this.options.reverseDirection?this.currentPosition>=0&&(this.currentPosition=this.resetPosition,this.container.style.transform="translateX("+this.currentPosition+"px)"):this.currentPosition<=this.resetPosition&&(this.currentPosition=0,this.container.style.transform="translateX(0px)"))},i.prototype.startScrolling=function(){this.isScrolling||(this.isScrolling=!0,this.lastTimestamp=0,this.animate())},i.prototype.pause=function(){this.isPaused=!0},i.prototype.resume=function(){this.isPaused=!1,!this.isScrolling||this.animationId||this.isMomentumActive||(this.lastTimestamp=0,this.animate())},i.prototype.stop=function(){this.isScrolling=!1,this.animationId&&(cancelAnimationFrame(this.animationId),this.animationId=null)},i.prototype.animate=function(t){if(!this.isScrolling)return void(this.animationId=null);if(0===this.lastTimestamp)return this.lastTimestamp=t||0,void(this.animationId=requestAnimationFrame(this.animate.bind(this)));const i=(t||0)-this.lastTimestamp;if(this.lastTimestamp=t||0,!this.isPaused&&i>0&&!this.isDragging&&!this.isMomentumActive){const t=100,e=Math.min(i,t),s=this.options.speed/1e3*e;let n;n=this.options.reverseDirection?this.currentPosition+s:this.currentPosition-s;const o=1;null!==this.resetPosition?this.options.reverseDirection?this.currentPosition=n>=0-o?this.resetPosition:n:n<=this.resetPosition+o?this.currentPosition=0:this.currentPosition=n:this.currentPosition=n,this.container.style.transform="translateX("+this.currentPosition+"px)"}this.animationId=requestAnimationFrame(this.animate.bind(this))},i.prototype.destroy=function(){this.stop(),this.boundHandlers.mouseenter&&this.container.removeEventListener("mouseenter",this.boundHandlers.mouseenter),this.boundHandlers.mouseleave&&this.container.removeEventListener("mouseleave",this.boundHandlers.mouseleave),this.boundHandlers.mousedown&&this.container.removeEventListener("mousedown",this.boundHandlers.mousedown),this.boundHandlers.mousemove&&document.removeEventListener("mousemove",this.boundHandlers.mousemove),this.boundHandlers.mouseup&&document.removeEventListener("mouseup",this.boundHandlers.mouseup),this.boundHandlers.mouseleaveWindow&&t.removeEventListener("mouseleave",this.boundHandlers.mouseleaveWindow),this.boundHandlers.touchstart&&this.container.removeEventListener("touchstart",this.boundHandlers.touchstart),this.boundHandlers.touchmove&&document.removeEventListener("touchmove",this.boundHandlers.touchmove),this.boundHandlers.touchend&&document.removeEventListener("touchend",this.boundHandlers.touchend),this.boundHandlers.selectstart&&this.container.removeEventListener("selectstart",this.boundHandlers.selectstart),this.resizeHandler&&(t.removeEventListener("resize",this.resizeHandler),this.resizeHandler=null),this.resizeDelayTimeout&&(clearTimeout(this.resizeDelayTimeout),this.resizeDelayTimeout=null),this.container.style.transform="",this.container.style.cursor=""},"undefined"!=typeof module&&module.exports?module.exports=i:t.InfiniteScrollCarousel=i}("undefined"!=typeof window?window:this);
|
|
2
|
+
//# sourceMappingURL=grab-n-drag-infinite-carousel.min.js.map
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "grab-n-drag-infinite-carousel",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A lightweight, dependency-free infinite scrolling carousel component with grab-and-drag interaction, momentum scrolling, and seamless looping",
|
|
5
|
+
"main": "grab-n-drag-infinite-carousel.js",
|
|
6
|
+
"style": "grab-n-drag-infinite-carousel.css",
|
|
7
|
+
"types": "grab-n-drag-infinite-carousel.d.ts",
|
|
8
|
+
"files": [
|
|
9
|
+
"grab-n-drag-infinite-carousel.js",
|
|
10
|
+
"grab-n-drag-infinite-carousel.min.js",
|
|
11
|
+
"grab-n-drag-infinite-carousel.css",
|
|
12
|
+
"grab-n-drag-infinite-carousel.min.css",
|
|
13
|
+
"grab-n-drag-infinite-carousel.d.ts",
|
|
14
|
+
"README.md",
|
|
15
|
+
"LICENSE"
|
|
16
|
+
],
|
|
17
|
+
"scripts": {
|
|
18
|
+
"build": "npm run minify:js && npm run minify:css",
|
|
19
|
+
"minify:js": "terser grab-n-drag-infinite-carousel.js -o grab-n-drag-infinite-carousel.min.js -c -m --source-map \"url='grab-n-drag-infinite-carousel.min.js.map'\"",
|
|
20
|
+
"minify:css": "postcss grab-n-drag-infinite-carousel.css -o grab-n-drag-infinite-carousel.min.css --use cssnano",
|
|
21
|
+
"test": "node test/test-runner.js",
|
|
22
|
+
"prepublishOnly": "npm run build"
|
|
23
|
+
},
|
|
24
|
+
"keywords": [
|
|
25
|
+
"carousel",
|
|
26
|
+
"slider",
|
|
27
|
+
"infinite-scroll",
|
|
28
|
+
"infinite",
|
|
29
|
+
"scroll",
|
|
30
|
+
"drag",
|
|
31
|
+
"touch",
|
|
32
|
+
"vanilla-js",
|
|
33
|
+
"zero-dependencies",
|
|
34
|
+
"lightweight",
|
|
35
|
+
"momentum",
|
|
36
|
+
"grab-and-drag"
|
|
37
|
+
],
|
|
38
|
+
"author": "Ethan Legum",
|
|
39
|
+
"license": "CC0-1.0",
|
|
40
|
+
"repository": {
|
|
41
|
+
"type": "git",
|
|
42
|
+
"url": "https://github.com/elegs99/Open-Source-Grab-n-Drag-Infinite-Scroll-Carousel.git"
|
|
43
|
+
},
|
|
44
|
+
"bugs": {
|
|
45
|
+
"url": "https://github.com/elegs99/Open-Source-Grab-n-Drag-Infinite-Scroll-Carousel/issues"
|
|
46
|
+
},
|
|
47
|
+
"homepage": "https://github.com/elegs99/Open-Source-Grab-n-Drag-Infinite-Scroll-Carousel#readme",
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"cssnano": "^6.0.1",
|
|
50
|
+
"postcss": "^8.4.35",
|
|
51
|
+
"postcss-cli": "^11.0.0",
|
|
52
|
+
"terser": "^5.26.0"
|
|
53
|
+
}
|
|
54
|
+
}
|