Gecko: textarea.onscroll
18th August 2005 - 00:08
Относительно близкое к IE поведение:
window.onload = function() {
var TAs = document.getElementsByTagName('textarea');
for (var i=TAs.length; 0<i--;) {
TAs[i].fired = 0;
if (TAs[i].onscroll && TAs[i].addEventListener)
TAs[i].addEventListener('DOMAttrModified', checkScroll, false);
}
}
function checkScroll(e) {
if (e.attrName != 'curpos' && e.attrName != 'maxpos')
return;
var TA = e.target;
if (TA._scrollTop != TA.scrollTop || TA._scrollLeft != TA.scrollLeft) {
TA._scrollTop = TA.scrollTop;
TA._scrollLeft = TA.scrollLeft;
TA.onscroll();
}
}
//~ <textarea onscroll='fireMe(this)'...
function fireMe(TA) {
TA.fired++;
//~ <p id="justDebug"...
document.getElementById('justDebug').innerHTML = 'fired = ' + TA.fired +
' :: scrollTop = ' + TA._scrollTop +
' :: scrollLeft = ' + TA._scrollLeft;
}
А вот переварить это в XBL сразу не получилось:
CSS:
textarea {-moz-binding:url('tascroll.xml#checkScroll')}
tascroll.xml:
<?xml version="1.0"?>
<bindings xmlns="http://www.mozilla.org/xbl">
<binding id="checkScroll">
<handlers>
<handler event="DOMAttrModified"><![CDATA[
if (!this.onscroll || (event.attrName != 'curpos' &&
event.attrName != 'maxpos')) return;
if (this._scrollTop != this.scrollTop || this._scrollLeft != this.scrollLeft) {
this._scrollTop = this.scrollTop;
this._scrollLeft = this.scrollLeft;
this.onscroll();
}
]]></handler>
</handlers>
</binding>
</bindings>
Работает этот XBL криво: при навигации в textarea стрелками клавы скролится сама textarea и то только по вертикали, а вот курсор в тексте остаётся на месте. Ы?
Categories: dHtml | comments: (0)