Ola,
Ik ben bezig om een script te schrijven waar onder andere een div-element in verplaatst moet kunnen worden. Hieronder een versimpelde versie die is aangepast om het probleem overzichtelijk te houden:
Zoals je ziet wordt de methode "move" in "drag" aangeroepen via de volledige naam: "scrollbar.move". De methode "move" kan op die plek niet aangesproken via "this.move", omdat (zo vermoed ik althans) bij het instellen van de event listener "document.onmousemove = scrollbar.move" het focus van op het object "scrollbar" verschuift naar "document"(.onmousemove anders?).
Nou is dit op zich nog niet zo'n groot probleem, omdat het werkt. Echter, nu wil ik in "this.move" de eigenschap "this.offsetY" oproepen. Het komt erop neer dat ik ook in de functie "move" eigenschappen van het object "scrollbar" nodig heb. Het lijkt mij het handigst door dit via een directe benadering met "this" te doen, dus dat die methoden die worden uitgevoerd na een event de eigenschappen en methoden overnemen van de klasse "scrollbar".
Op internet vond ik een script dat kwa functionaliteit en opbouw aardig overeenkomt met mijn stuk code:
Zoals je ziet heeft dit script ook een object-georiënteerde opbouw, alleen is de constructie anders, omdat hier het object wordt geconstrueerd in een variabele en niet, zoals in mijn script, in een functie. Echter, dit script kan wel in de functie "moveit ()" eigenschappen van de klasse "dragobject" opvragen. Dat is dus wat mijn script ook moet kunnen.
Ik heb ondertussen al het hele internet (inclusief got) afgestruind om uit te vinden waarom het in dit script wel kan en in mijn script niet. Ligt het misschien aan de manier waarop het object wordt geconstrueerd?
Ook heb ik met verschillende opstellingen gekeken of "prototype" of "apply ()" het probleem kon oplossen, maar dat mocht niet baten.
Wellicht dat 1 van jullie weet hoe ik de eigenschappen van het object "scrollbar" worden overgenomen in "this.move" als deze wordt uitgevoerd naar aanleiding van een event in "document"?
Alvast bedankt
Ik ben bezig om een script te schrijven waar onder andere een div-element in verplaatst moet kunnen worden. Hieronder een versimpelde versie die is aangepast om het probleem overzichtelijk te houden:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| function scrollbar ()
{
this.offsetY = 10;
this.move = function (event)
{
// bewegen
return this.offsetY; // geeft undefined
}
this.drag = function (event)
{
var captEvent = window.event ? window.event : event;
// Schakel de standaardevents van de webbrowser uit
if ( captEvent.preventDefault ) { captEvent.preventDefault (); }
document.onmousemove = scrollbar.move;
}
this.initialize = function ()
{
document.onmousedown = this.drag;
}
}
var scrollbar = new scrollbar ();
scrollbar.initialize (); |
Zoals je ziet wordt de methode "move" in "drag" aangeroepen via de volledige naam: "scrollbar.move". De methode "move" kan op die plek niet aangesproken via "this.move", omdat (zo vermoed ik althans) bij het instellen van de event listener "document.onmousemove = scrollbar.move" het focus van op het object "scrollbar" verschuift naar "document"(.onmousemove anders?).
Nou is dit op zich nog niet zo'n groot probleem, omdat het werkt. Echter, nu wil ik in "this.move" de eigenschap "this.offsetY" oproepen. Het komt erop neer dat ik ook in de functie "move" eigenschappen van het object "scrollbar" nodig heb. Het lijkt mij het handigst door dit via een directe benadering met "this" te doen, dus dat die methoden die worden uitgevoerd na een event de eigenschappen en methoden overnemen van de klasse "scrollbar".
Op internet vond ik een script dat kwa functionaliteit en opbouw aardig overeenkomt met mijn stuk code:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| var dragobject = {
z: 0, x: 0, y: 0, offsetx : null, offsety : null, targetobj : null, dragapproved : 0,
initialize:function() {
document.onmousedown = this.drag
document.onmouseup = function () { this.dragapproved=0 }
},
drag:function(e) {
var evtobj = window.event ? window.event : e
this.targetobj = window.event ? event.srcElement : e.target
if ( this.targetobj.className=="drag" ) {
this.dragapproved = 1
if ( isNaN (parseInt (this.targetobj.style.left) ) ) {
this.targetobj.style.left = 0
}
if ( isNaN (parseInt (this.targetobj.style.top) ) ) {
this.targetobj.style.top = 0
}
this.offsetx = parseInt (this.targetobj.style.left)
this.offsety = parseInt (this.targetobj.style.top)
this.x = evtobj.clientX
this.y = evtobj.clientY
if (evtobj.preventDefault)
evtobj.preventDefault ()
document.onmousemove = dragobject.moveit
}
},
moveit:function(e)
{
var evtobj = window.event ? window.event : e
if (this.dragapproved == 1) {
this.targetobj.style.left = this.offsetx+evtobj.clientX-this.x+"px"
this.targetobj.style.top = this.offsety+evtobj.clientY-this.y+"px"
return false
}
}
}
dragobject.initialize() |
Zoals je ziet heeft dit script ook een object-georiënteerde opbouw, alleen is de constructie anders, omdat hier het object wordt geconstrueerd in een variabele en niet, zoals in mijn script, in een functie. Echter, dit script kan wel in de functie "moveit ()" eigenschappen van de klasse "dragobject" opvragen. Dat is dus wat mijn script ook moet kunnen.
Ik heb ondertussen al het hele internet (inclusief got) afgestruind om uit te vinden waarom het in dit script wel kan en in mijn script niet. Ligt het misschien aan de manier waarop het object wordt geconstrueerd?
Ook heb ik met verschillende opstellingen gekeken of "prototype" of "apply ()" het probleem kon oplossen, maar dat mocht niet baten.
Wellicht dat 1 van jullie weet hoe ik de eigenschappen van het object "scrollbar" worden overgenomen in "this.move" als deze wordt uitgevoerd naar aanleiding van een event in "document"?
Alvast bedankt