Untitled
unknown
plain_text
7 months ago
15 kB
1
Indexable
Never
function ParticleSlider(t) { var e = this; if (e.sliderId = "particle-slider", e.color = "#fff", e.hoverColor = "#88f", e.width = 0, e.height = 0, e.ptlGap = 0, e.ptlSize = 1, e.slideDelay = 10, e.arrowPadding = 10, e.showArrowControls = !0, e.onNextSlide = null, e.onWidthChange = null, e.onHeightChange = null, e.onSizeChange = null, e.monochrome = !1, e.mouseForce = 1e4, e.restless = !0, e.imgs = [], t) for (var r = ["color", "hoverColor", "width", "height", "ptlGap", "ptlSize", "slideDelay", "arrowPadding", "sliderId", "showArrowControls", "onNextSlide", "monochrome", "mouseForce", "restless", "imgs", "onSizeChange", "onWidthChange", "onHeightChange"], n = 0, i = r.length; n < i; n++) t[r[n]] && (e[r[n]] = t[r[n]]); if (e.$container = e.$("#" + e.sliderId), e.$$children = e.$container.childNodes, e.$controlsContainer = e.$(".controls"), e.$$slides = e.$(".slide", e.$(".slides").childNodes, !0), e.$controlLeft = null, e.$controlRight = null, e.$canv = e.$(".draw"), e.$srcCanv = document.createElement("canvas"), e.$srcCanv.style.display = "none", e.$container.appendChild(e.$srcCanv), e.$prevCanv = document.createElement("canvas"), e.$prevCanv.style.display = "none", e.$container.appendChild(e.$prevCanv), e.$nextCanv = document.createElement("canvas"), e.$nextCanv.style.display = "none", e.$container.appendChild(e.$nextCanv), e.$overlay = document.createElement("p"), e.$container.appendChild(e.$overlay), e.imgControlPrev = null, e.imgControlNext = null, e.$$slides.length <= 1 && (e.showArrowControls = !1), e.$controlsContainer && e.$controlsContainer.childNodes && 1 == e.showArrowControls ? (e.$controlLeft = e.$(".left", e.$controlsContainer.childNodes), e.$controlRight = e.$(".right", e.$controlsContainer.childNodes), e.imgControlPrev = new Image, e.imgControlNext = new Image, e.imgControlPrev.onload = function() { e.$prevCanv.height = this.height, e.$prevCanv.width = this.width, e.loadingStep() } , e.imgControlNext.onload = function() { e.$nextCanv.height = this.height, e.$nextCanv.width = this.width, e.loadingStep() } , e.imgControlPrev.src = e.$controlLeft.getAttribute("data-src"), e.imgControlNext.src = e.$controlRight.getAttribute("data-src")) : e.showArrowControls = !1, e.width <= 0 && (e.width = e.$container.clientWidth), e.height <= 0 && (e.height = e.$container.clientHeight), e.mouseDownRegion = 0, e.colorArr = e.parseColor(e.color), e.hoverColorArr = e.parseColor(e.hoverColor), e.mx = -1, e.my = -1, e.swipeOffset = 0, e.cw = e.getCw(), e.ch = e.getCh(), e.frame = 0, e.nextSlideTimer = !1, e.currImg = 0, e.lastImg = 0, e.imagesLoaded = 0, e.pxlBuffer = { first: null }, e.recycleBuffer = { first: null }, e.ctx = e.$canv.getContext("2d"), e.srcCtx = e.$srcCanv.getContext("2d"), e.prevCtx = e.$prevCanv.getContext("2d"), e.nextCtx = e.$nextCanv.getContext("2d"), e.$canv.width = e.cw, e.$canv.height = e.ch, e.shuffle = function() { for (var t, e, r = 0, n = this.length; r < n; r++) e = Math.floor(Math.random() * n), t = this[r], this[r] = this[e], this[e] = t } , Array.prototype.shuffle = e.shuffle, e.$canv.onmouseout = function() { e.mx = -1, e.my = -1, e.mouseDownRegion = 0 } , e.$canv.onmousemove = function(t) { var r = new function(t) { var r = 0 , n = 0 , i = "string" == typeof t ? e.$(t) : t; if (i) { r = i.offsetLeft, n = i.offsetTop; for (var o = document.getElementsByTagName("body")[0]; i.offsetParent && i != o; ) r += i.offsetParent.offsetLeft, n += i.offsetParent.offsetTop, i = i.offsetParent } this.x = r, this.y = n } (e.$container); e.mx = t.clientX - r.x + document.body.scrollLeft + document.documentElement.scrollLeft, e.my = t.clientY - r.y + document.body.scrollTop + document.documentElement.scrollTop } , e.$canv.onmousedown = function() { if (e.imgs.length > 1) { var t = 0; e.mx >= 0 && e.mx < 2 * e.arrowPadding + e.$prevCanv.width ? t = -1 : e.mx > 0 && e.mx > e.cw - (2 * e.arrowPadding + e.$nextCanv.width) && (t = 1), e.mouseDownRegion = t } } , e.$canv.onmouseup = function() { if (e.imgs.length > 1) { var t = ""; e.mx >= 0 && e.mx < 2 * e.arrowPadding + e.$prevCanv.width ? t = -1 : e.mx > 0 && e.mx > e.cw - (2 * e.arrowPadding + e.$nextCanv.width) && (t = 1), 0 != t && 0 != e.mouseDownRegion && (t != e.mouseDownRegion && (t *= -1), e.nextSlideTimer && clearTimeout(e.nextSlideTimer), e.nextSlide(t)), e.mouseDownRegion = 0 } } , 0 == e.imgs.length) for (n = 0, i = e.$$slides.length; n < i; n++) { var o = new Image; e.imgs.push(o), o.src = e.$$slides[n].getAttribute("data-src") } e.imgs.length > 0 && (e.imgs[0].onload = function() { e.loadingStep() } ), e.requestAnimationFrame(function() { e.nextFrame() }) } var psParticle = function(t) { this.ps = t, this.ttl = null, this.color = t.colorArr, this.next = null, this.prev = null, this.gravityX = 0, this.gravityY = 0, this.x = Math.random() * t.cw, this.y = Math.random() * t.ch, this.velocityX = 10 * Math.random() - 5, this.velocityY = 10 * Math.random() - 5 }; psParticle.prototype.move = function() { var t = this.ps; if (null != this.ttl && this.ttl-- <= 0) t.swapList(this, t.pxlBuffer, t.recycleBuffer), this.ttl = null; else { var e = this.gravityX + t.swipeOffset - this.x , r = this.gravityY - this.y , n = Math.sqrt(Math.pow(e, 2) + Math.pow(r, 2)) , i = Math.atan2(r, e) , o = .01 * n; 1 == t.restless ? o += .1 * Math.random() - .05 : o < .01 && (this.x = this.gravityX + .25, this.y = this.gravityY + .25); var a = 0 , l = 0; if (t.mx >= 0 && t.mouseForce) { var s = this.x - t.mx , h = this.y - t.my; a = Math.min(t.mouseForce / (Math.pow(s, 2) + Math.pow(h, 2)), t.mouseForce), l = Math.atan2(h, s), "function" == typeof this.color && (l += Math.PI, a *= .001 + .1 * Math.random() - .05) } else a = 0, l = 0; this.velocityX += o * Math.cos(i) + a * Math.cos(l), this.velocityY += o * Math.sin(i) + a * Math.sin(l), this.velocityX *= .92, this.velocityY *= .92, this.x += this.velocityX, this.y += this.velocityY } } , ParticleSlider.prototype.Particle = psParticle, ParticleSlider.prototype.swapList = function(t, e, r) { null == t ? t = new this.Particle(this) : e.first == t ? null != t.next ? (t.next.prev = null, e.first = t.next) : e.first = null : null == t.next ? t.prev.next = null : (t.prev.next = t.next, t.next.prev = t.prev), null == r.first ? (r.first = t, t.prev = null, t.next = null) : (t.next = r.first, r.first.prev = t, r.first = t, t.prev = null) } , ParticleSlider.prototype.parseColor = function(t) { var e; t = t.replace(" ", ""); if (e = /^#([\da-fA-F]{2})([\da-fA-F]{2})([\da-fA-F]{2})/.exec(t)) e = [parseInt(e[1], 16), parseInt(e[2], 16), parseInt(e[3], 16)]; else if (e = /^#([\da-fA-F])([\da-fA-F])([\da-fA-F])/.exec(t)) e = [17 * parseInt(e[1], 16), 17 * parseInt(e[2], 16), 17 * parseInt(e[3], 16)]; else if (e = /^rgba\(([\d]+),([\d]+),([\d]+),([\d]+|[\d]*.[\d]+)\)/.exec(t)) e = [+e[1], +e[2], +e[3], +e[4]]; else { if (!(e = /^rgb\(([\d]+),([\d]+),([\d]+)\)/.exec(t))) return null; e = [+e[1], +e[2], +e[3]] } return isNaN(e[3]) && (e[3] = 1), e[3] *= 255, e } , ParticleSlider.prototype.loadingStep = function() { var t = this; t.imagesLoaded++, (t.imagesLoaded >= 3 || 0 == t.showArrowControls) && (t.resize(), t.slideDelay > 0 && (t.nextSlideTimer = setTimeout(function() { t.nextSlide() }, 1e3 * t.slideDelay))) } , ParticleSlider.prototype.$ = function(t, e, r) { if ("." == t[0]) { var n = t.substr(1); e || (e = this.$$children); for (var i = [], o = 0, a = e.length; o < a; o++) e[o].className && e[o].className == n && i.push(e[o]); return 0 == i.length ? null : 1 != i.length || r ? i : i[0] } return document.getElementById(t.substr(1)) } , ParticleSlider.prototype.nextFrame = function() { var t = this; 1 == t.mouseDownRegion && t.mx < t.cw / 2 || -1 == t.mouseDownRegion && t.mx > t.cw / 2 ? t.swipeOffset = t.mx - t.cw / 2 : t.swipeOffset = 0; for (var e = t.pxlBuffer.first, r = null; null != e; ) r = e.next, e.move(), e = r; if (t.drawParticles(), t.frame++ % 25 == 0 && (t.cw != t.getCw() || t.ch != t.getCh())) { var n = t.getCh() , i = t.getCw(); t.ch != i && "function" == typeof t.onWidthChange && t.onWidthChange(t, i), t.ch != n && "function" == typeof t.onHeightChange && t.onHeightChange(t, n), "function" == typeof t.onSizeChange && t.onSizeChange(t, i, n), t.resize() } setTimeout(function() { t.requestAnimationFrame(function() { t.nextFrame() }) }, 15) } , ParticleSlider.prototype.nextSlide = function(t) { var e = this; null != e.nextSlideTimer && e.imgs.length > 1 ? (e.currImg = (e.currImg + e.imgs.length + (t || 1)) % e.imgs.length, e.resize(), e.slideDelay > 0 && (e.nextSlideTimer = setTimeout(function() { e.nextSlide() }, 1e3 * e.slideDelay))) : e.slideDelay > 0 && (e.nextSlideTimer = setTimeout(function() { e.nextSlide() }, 1e3 * e.slideDelay)), "function" == typeof e.onNextSlide && e.onNextSlide(e.currImg) } , ParticleSlider.prototype.drawParticles = function() { for (var t, e, r, n, i, o, a = this, l = a.ctx.createImageData(a.cw, a.ch), s = l.data, h = a.pxlBuffer.first; null != h; ) { for (e = ~~h.x, r = ~~h.y, n = e; n < e + a.ptlSize && n >= 0 && n < a.cw; n++) for (i = r; i < r + a.ptlSize && i >= 0 && i < a.ch; i++) t = 4 * (i * l.width + n), o = "function" == typeof h.color ? h.color() : h.color, s[t + 0] = o[0], s[t + 1] = o[1], s[t + 2] = o[2], s[t + 3] = o[3]; h = h.next } l.data = s, a.ctx.putImageData(l, 0, 0) } , ParticleSlider.prototype.getPixelFromImageData = function(t, e, r) { for (var n = this, o = [], a = 0; a < t.width; a += n.ptlGap + 1) for (var l = 0; l < t.height; l += n.ptlGap + 1) i = 4 * (l * t.width + a), t.data[i + 3] > 0 && o.push({ x: e + a, y: r + l, color: 1 == n.monochrome ? [n.colorArr[0], n.colorArr[1], n.colorArr[2], n.colorArr[3]] : [t.data[i], t.data[i + 1], t.data[i + 2], t.data[i + 3]] }); return o } , ParticleSlider.prototype.init = function(t) { var e = this; if (e.imgs.length > 0) { e.$srcCanv.width = e.imgs[e.currImg].width, e.$srcCanv.height = e.imgs[e.currImg].height, e.srcCtx.clearRect(0, 0, e.$srcCanv.width, e.$srcCanv.height), e.srcCtx.drawImage(e.imgs[e.currImg], 0, 0); var r = e.getPixelFromImageData(e.srcCtx.getImageData(0, 0, e.$srcCanv.width, e.$srcCanv.height), ~~(e.cw / 2 - e.$srcCanv.width / 2), ~~(e.ch / 2 - e.$srcCanv.height / 2)); if (1 == e.showArrowControls) { e.prevCtx.clearRect(0, 0, e.$prevCanv.width, e.$prevCanv.height), e.prevCtx.drawImage(e.imgControlPrev, 0, 0); for (var n = e.getPixelFromImageData(e.prevCtx.getImageData(0, 0, e.$prevCanv.width, e.$prevCanv.height), e.arrowPadding, ~~(e.ch / 2 - e.$prevCanv.height / 2)), i = 0, o = n.length; i < o; i++) n[i].color = function() { return e.mx >= 0 && e.mx < 2 * e.arrowPadding + e.$prevCanv.width ? e.hoverColorArr : e.colorArr } , r.push(n[i]); e.nextCtx.clearRect(0, 0, e.$nextCanv.width, e.$nextCanv.height), e.nextCtx.drawImage(e.imgControlNext, 0, 0); var a = e.getPixelFromImageData(e.nextCtx.getImageData(0, 0, e.$nextCanv.width, e.$nextCanv.height), e.cw - e.arrowPadding - e.$nextCanv.width, ~~(e.ch / 2 - e.$nextCanv.height / 2)); for (i = 0, o = a.length; i < o; i++) a[i].color = function() { return e.mx > 0 && e.mx > e.cw - (2 * e.arrowPadding + e.$nextCanv.width) ? e.hoverColorArr : e.colorArr } , r.push(a[i]) } e.currImg == e.lastImg && 1 != t || (r.shuffle(), e.lastImg = e.currImg); var l = e.pxlBuffer.first; for (i = 0, o = r.length; i < o; i++) { var s = null; null != l ? (s = l, l = l.next) : (e.swapList(e.recycleBuffer.first, e.recycleBuffer, e.pxlBuffer), s = e.pxlBuffer.first), s.gravityX = r[i].x, s.gravityY = r[i].y, s.color = r[i].color } for (; null != l; ) l.ttl = ~~(10 * Math.random()), l.gravityY = ~~(e.ch * Math.random()), l.gravityX = ~~(e.cw * Math.random()), l = l.next; e.$overlay.innerHTML = e.$$slides[e.currImg].innerHTML } } , ParticleSlider.prototype.getCw = function() { return Math.min(document.body.clientWidth, this.width, this.$container.clientWidth) } , ParticleSlider.prototype.getCh = function() { return Math.min(document.body.clientHeight, this.height, this.$container.clientHeight) } , ParticleSlider.prototype.resize = function() { var t = this; t.cw = t.getCw(), t.ch = t.getCh(), t.$canv.width = t.cw, t.$canv.height = t.ch, t.init(!0) } , ParticleSlider.prototype.setColor = function(t) { this.colorArr = this.parseColor(t) } , ParticleSlider.prototype.setHoverColor = function(t) { this.hoverColorArr = this.parseColor(t) } , ParticleSlider.prototype.requestAnimationFrame = function(t) { (window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(t) { window.setTimeout(t, 1e3 / 60) } )(t) } ;
Leave a Comment