Viewing File: /home/ubuntu/ridge-crop-landing-ui-revamp/assets/js/cursor.js
;(function ($) {
"use strict";
window.App = {};
App.config = {
headroom: {
enabled: true,
options: {
classes : {
initial : "headroom",
pinned : "is-pinned",
unpinned : "is-unpinned",
top : "is-top",
notTop : "is-not-top",
bottom : "is-bottom",
notBottom : "is-not-bottom",
frozen: "is-frozen",
},
}
},
ajax: {
enabled: true,
},
cursorFollower: {
enabled: true,
disableBreakpoint: '992',
},
}
App.html = document.querySelector('html');
App.body = document.querySelector('body');
window.onload = function () {
if (App.config.cursorFollower.enabled) {
Cursor.init();
}
}
const Cursor = (function() {
const cursor = document.querySelector(".tx-js-cursor");
let follower;
let label;
let icon;
let clientX;
let clientY;
let cursorWidth;
let cursorHeight;
let cursorTriggers;
let state;
function variables() {
follower = cursor.querySelector(".tx-js-follower");
label = cursor.querySelector(".tx-js-label");
icon = cursor.querySelector(".tx-js-icon");
clientX = -100;
clientY = -100;
cursorWidth = cursor.offsetWidth / 2;
cursorHeight = cursor.offsetHeight / 2;
cursorTriggers;
state = false;
}
function init() {
if (!cursor) return;
variables();
state = true;
cursor.classList.add('is-enabled');
document.addEventListener("mousedown", e => {
cursor.classList.add('is-mouse-down');
});
document.addEventListener("mouseup", e => {
cursor.classList.remove('is-mouse-down');
});
document.addEventListener("mousemove", (event) => {
clientX = event.clientX;
clientY = event.clientY;
});
const render = () => {
cursor.style.transform = `translate(${clientX - cursorWidth}px, ${clientY - cursorHeight}px)`;
requestAnimationFrame(render);
};
requestAnimationFrame(render);
update();
breakpoint();
}
function enterHandler({ target }) {
cursor.classList.add('is-active');
if (target.getAttribute('data-cursor-label')) {
App.body.classList.add('is-cursor-active');
cursor.classList.add('has-label');
label.innerHTML = target.getAttribute('data-cursor-label');
}
if (target.getAttribute('data-cursor-icon')) {
App.body.classList.add('is-cursor-active');
cursor.classList.add('has-icon');
const iconAttr = target.getAttribute('data-cursor-icon');
}
}
function leaveHandler({ target }) {
App.body.classList.remove('is-cursor-active');
cursor.classList.remove('is-active');
cursor.classList.remove('has-label');
cursor.classList.remove('has-icon');
}
function update() {
if (!cursor) return;
cursorTriggers = document.querySelectorAll([
"button",
"a",
"input",
"[data-cursor]",
"[data-cursor-label]",
"[data-cursor-icon]",
"textarea",
".progress-wrap",
".service-button-next",
".service-button-prev",
".tx-swiper-arrow",
".invite-navigation .tp-bullet"
]);
cursorTriggers.forEach(el => {
el.addEventListener("mouseenter", enterHandler);
el.addEventListener("mouseleave", leaveHandler);
});
}
function clear() {
if (!cursor) return;
cursorTriggers.forEach(el => {
el.removeEventListener("mouseenter", enterHandler);
el.removeEventListener("mouseleave", leaveHandler);
});
}
function hide() {
if (!cursor) return;
cursor.classList.add('is-hidden');
}
function show() {
if (!cursor) return;
cursor.classList.remove('is-hidden');
}
function breakpoint() {
if (!state) return;
if (!App.config.cursorFollower.disableBreakpoint) return;
let width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
if (width < App.config.cursorFollower.disableBreakpoint) {
state = false;
cursor.classList.remove('is-enabled');
clear();
} else {
state = true;
cursor.classList.add('is-enabled');
update();
}
window.addEventListener('resize', () => {
let width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
if (width < App.config.cursorFollower.disableBreakpoint) {
state = false;
cursor.classList.remove('is-enabled');
clear();
} else {
state = true;
cursor.classList.add('is-enabled');
update();
}
})
}
return {
init: init,
update: update,
clear: clear,
hide: hide,
show: show,
};
})();
})(jQuery);
Back to Directory
File Manager