$.exists = function (selector) { return $(selector).length > 0; }; $(function () { startOffset = isMobile() ? "100%" : "100%"; gsap.registerPlugin(ScrollToPlugin); smoothScroll(); triggerScrollObject(); }); function getScrollTop() { return $(window).scrollTop(); } function isMobile() { var UserAgent = navigator.userAgent; if ( UserAgent.match( /iPhone|iPad|iPad|Android|Windows CE|BlackBerry|Symbian|Windows Phone|webOS|Opera Mini|Opera Mobi|POLARIS|IEMobile|lgtelecom|nokia|SonyEricsson/i ) != null || UserAgent.match(/LG|SAMSUNG|Samsung/) != null ) { return true; } else { // Ipad Safari Browser if (detectIpad()) { return true; } else { return false; } } } function detectIpad() { var userAgent = navigator.userAgent || navigator.vendor || window.opera; // Lying iOS13 iPad if (userAgent.match(/Macintosh/i) !== null && getWindowWidth() < 1025) { // need to distinguish between Macbook and iPad var canvas = document.createElement("canvas"); if (canvas !== null) { var context = canvas.getContext("webgl") || canvas.getContext("experimental-webgl"); if (context) { var info = context.getExtension("WEBGL_debug_renderer_info"); if (info) { var renderer = context.getParameter(info.UNMASKED_RENDERER_WEBGL); if (renderer.indexOf("Apple") !== -1) return true; } } } } return false; } function detectOS() { var agent = navigator.userAgent.toLowerCase(); var osCheck; if (agent.indexOf("android") > -1) { return "android"; } else if ( agent.indexOf("iphone") > -1 || agent.indexOf("ipad") > -1 || agent.indexOf("ipod") > -1 || agent.indexOf("macintosh") > -1 ) { return "ios"; } else { return "other"; } return osCheck; } function moveScrollTop(top, speed) { $("html, body").animate({ scrollTop: top }, speed, "easeInOutExpo"); } /* addClass Active */ function addClassName(object, className) { $(object).addClass(className); } function removeClassName(object, className) { $(object).removeClass(className); } function getParameter(strParamName) { var arrResult = null; if (strParamName) { arrResult = location.search.match(new RegExp("[&?]" + strParamName + "=(.*?)(&|$)")); } return arrResult && arrResult[1] ? arrResult[1] : null; } function toAnchorParameter(anchor) { if (getParameter(anchor)) { var anchorConTop = $("#" + getParameter(anchor) + "").offset().top; var headerHeight = $("#header").height(); moveScrollTop(anchorConTop - headerHeight, 1000); } } /* ************************ * smooth Scroll * gsap.min.js, ScrollToPlugin.min.js ************************ */ // Check Passive Support function smoothScroll_passive() { var supportsPassive = false; try { document.addEventListener("test", null, { get passive() { supportsPassive = true; }, }); } catch (e) {} return supportsPassive; } // Start smooth Scroll function smoothScroll() { var $window = $(window); if (smoothScroll_passive()) { window.addEventListener("wheel", smoothScroll_scrolling, { passive: false, }); } else { $window.on("mousewheel DOMMouseScroll", smoothScroll_scrolling); } $("html").addClass("smooth-srolling"); } // Scroll Event function smoothScroll_scrolling(event) { event.preventDefault(); var $window = $(window); var scrollTime = 0.5; // var scrollDistance = $window.height() / 2.5; var delta = 0; if (smoothScroll_passive()) { var scrollDistance = $window.height() / 3; delta = event.wheelDelta / 120 || -event.originalEvent.detail / 3; } else { var scrollDistance = $window.height() / 2.5; if (typeof event.originalEvent.deltaY != "undefined") { delta = -event.originalEvent.deltaY / 120; } else { delta = event.originalEvent.wheelDelta / 120 || -event.originalEvent.detail / 3; } } var scrollTop = $window.scrollTop(); var finalScroll = scrollTop - parseInt(delta * scrollDistance); winScrolling = gsap.to($window, scrollTime, { scrollTo: { y: finalScroll, autoKill: true }, ease: Power1.easeOut, overwrite: 5, }); } // Destroy smooth Scroll function smoothScroll_destory(event) { if (smoothScroll_passive()) { window.removeEventListener("wheel", smoothScroll_scrolling); } else { $(window).off("mousewheel DOMMouseScroll", smoothScroll_scrolling); } gsap.killTweensOf($(window), { scrollTo: true }); } function toFit(cb, _ref) { var _ref$dismissCondition = _ref.dismissCondition, dismissCondition = _ref$dismissCondition === void 0 ? function () { return false; } : _ref$dismissCondition, _ref$triggerCondition = _ref.triggerCondition, triggerCondition = _ref$triggerCondition === void 0 ? function () { return true; } : _ref$triggerCondition; if (!cb) { throw Error("Invalid required arguments"); } var tick = false; return function () { // console.log('scroll call') if (tick) { return; } tick = true; return requestAnimationFrame(function () { if (dismissCondition()) { tick = false; return; } if (triggerCondition()) { //console.log('real call') tick = false; return cb(); } }); }; } function checkOffset(object) { return $(object).offset().top; } function getScrollBarWidth() { if ($(document).height() > $(window).height()) { $("body").append( '
' ); fakeScrollBar = $("#fakescrollbar"); fakeScrollBar.append('
 
'); var w1 = fakeScrollBar.find("div").innerWidth(); fakeScrollBar.css("overflow-y", "scroll"); var w2 = $("#fakescrollbar").find("div").html("html is required to init new width.").innerWidth(); fakeScrollBar.remove(); return w1 - w2; } return 0; } function getWindowWidth() { return $(window).outerWidth() + getScrollBarWidth(); } function getWindowHeight() { return $(window).height(); } function triggerScrollObject() { $("[data-scroll]").each(function () { var $scrollElem = $(this); var scrollElemOffset = $(this).data("scroll-offset") ? $(this).data("scroll-offset") : startOffset; $scrollElem.waypoint( function (direction) { if (direction === "down") { $scrollElem.addClass("animated"); } else if (direction === "up") { //$scrollElem.removeClass('animated'); } }, { triggerOnce: false, offset: scrollElemOffset, } ); }); }