Beste mensen,
Ik heb een smooth scroll zo aangepast dat ik het ook met iframes kan laten werken.
In het hoofdvenster klik je op een link, waarna het binnen het iframe naar het juiste anchor scrollt. Dit werkt bijna perfect. Echter, in een flits zie je bovenkant van de pagina, waarna de pagina van het juiste punt naar het andere juiste punt scrollt.
Wellicht dat iemand van jullie zo het probleem ziet.
Je kunt script werkend zien op de volgende site: www.roemervandersteeg.nl/test.php
Ik heb een smooth scroll zo aangepast dat ik het ook met iframes kan laten werken.
In het hoofdvenster klik je op een link, waarna het binnen het iframe naar het juiste anchor scrollt. Dit werkt bijna perfect. Echter, in een flits zie je bovenkant van de pagina, waarna de pagina van het juiste punt naar het andere juiste punt scrollt.
Wellicht dat iemand van jullie zo het probleem ziet.
Je kunt script werkend zien op de volgende site: www.roemervandersteeg.nl/test.php
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
| <script type="text/javascript">
//<![CDATA[
var scrollInt;
var scrTime, scrSt, scrDist, scrDur, scrInt;
function replaceAnchorLinks()
{
var anchors, i, targ, targarr;
if (!document.getElementById)
return;
// get all anchors
anchors = document.getElementsByTagName("a");
for (i=0;i<anchors.length;i++)
{
// get name of target anchor
targ = anchors[i].href.substring( anchors[i].href.indexOf("#")+1 );
// find target anchor
targarr = parent.iframe.document.getElementsByName( targ );
if (targarr.length)
{
anchors[i].className = (targarr[0].offsetTop < anchors[i].offsetTop) ? "up" : "down";
anchors[i].id = "__" + targ; // save target as id with prefix (used in onclick function below)
anchors[i].onmousedown = function () { scrollToAnchor( this.id.substring( 2 ) ); return false; };
anchors[i].href = "iframe.php#"; // rewrite href
}
}
}
/*
SCROLL FUNCTIONS
*/
function scrollPage()
{
scrTime += scrInt;
if (scrTime < scrDur) {
window.iframe.scrollTo( 0, easeInOut(scrTime,scrSt,scrDist,scrDur) );
}else{
window.iframe.scrollTo( 0, scrSt+scrDist );
clearInterval(scrollInt);
}
}
function scrollToAnchor(aname)
{
var anchors, i, ele;
if (!document.getElementById)
return;
// get anchor
anchors = iframe.document.getElementsByTagName("a");
for (i=0;i<anchors.length;i++) {
if (anchors[i].name == aname) {
ele = anchors[i];
i = anchors.length;
}
}
// set scroll target
if (window.iframe.scrollY)
scrSt = window.iframe.scrollY;
else if (iframe.document.documentElement.scrollTop)
scrSt = iframe.document.documentElement.scrollTop;
else
scrSt = iframe.document.body.scrollTop;
scrDist = ele.offsetTop - scrSt;
scrDur = 1000;
scrTime = 0;
scrInt = 10;
// set interval
clearInterval(scrollInt);
scrollInt = setInterval( scrollPage, scrInt );
}
/*
EASING FUNCTIONS
*/
function easeInOut(t,b,c,d)
{
return c/2 * (1 - Math.cos(Math.PI*t/d)) + b;
}
//]]>
</script> |