class MouseTrackerSDK {
constructor(options) {
this.options = options;
this.mouseMovements = [];
this.init();
}
init() {
const touchArea = document.getElementById('app');
touchArea.addEventListener('touchstart', this.trackMouseMovement.bind(this));
touchArea.addEventListener('touchmove', this.trackMouseMovement.bind(this), {passive: false});
touchArea.addEventListener('touchend', this.trackMouseMovement.bind(this));
touchArea.addEventListener('touchcancel', this.trackMouseMovement.bind(this));
document.addEventListener('mousemove', this.trackMouseMovement.bind(this));
document.body.addEventListener('mousemove', function(event) {
console.log(event);
});
}
trackMouseMovement(event) {
const movementData = {
x: event.pageX,
y: event.pageY,
timestamp: Date.now()
};
if (this.options.elementSelector && !event.target.matches(this.options.elementSelector)) {
return;
}
this.mouseMovements.push(movementData);
if (this.mouseMovements.length >= 15) {
this.sendDataToServer();
}
if (this.mouseMovements.length > this.options.bufferSize) {
this.mouseMovements.shift();
}
}
sendDataToServer() {
if (this.mouseMovements.length === 0) {
return;
}
const dataToSend = {
movements: this.mouseMovements,
siteKey: this.options.siteKey
};
fetch(this.options.endpoint, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${this.options.apiToken}`
},
body: JSON.stringify(dataToSend)
})
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(data => {
console.log('Data sent successfully', data);
this.mouseMovements = [];
})
.catch(error => {
console.error('Error sending data:', error);
});
}
}
const mouser = new MouseTrackerSDK();
|