4in1_ws_web/htdocs/js/common/20-dynlogo.js
2023-12-30 23:29:31 +00:00

60 lines
1.4 KiB
JavaScript

var DynamicLogo = {
dynLink: null,
afr: null,
afrUrl: null,
init: function() {
this.dynLink = ge('head_dyn_link');
this.cdText = ge('head_cd_text');
if (!this.dynLink) {
return console.warn('DynamicLogo.init: !this.dynLink');
}
var spans = this.dynLink.querySelectorAll('span.head-logo-path');
for (var i = 0; i < spans.length; i++) {
var span = spans[i];
addEvent(span, 'mouseover', this.onSpanOver);
addEvent(span, 'mouseout', this.onSpanOut);
}
},
setUrl: function(url) {
if (this.afr !== null) {
cancelAnimationFrame(this.afr);
}
this.afrUrl = url;
this.afr = requestAnimationFrame(this.onAnimationFrame);
},
onAnimationFrame: function() {
var url = this.afrUrl;
// update link
this.dynLink.setAttribute('href', url);
// update console text
if (this.afrUrl === '/') {
url = '~';
} else {
url = '~'+url.replace(/\/$/, '');
}
this.cdText.innerHTML = escape(url);
this.afr = null;
},
onSpanOver: function() {
var span = event.target;
this.setUrl(span.getAttribute('data-url'));
cancelEvent(event);
},
onSpanOut: function() {
var span = event.target;
this.setUrl('/');
cancelEvent(event);
}
};
bindEventHandlers(DynamicLogo);