Hallo Ludwig,
Fände ich auch schade!lck wrote:wollte mal nachfragen, ob du Zeit hattest dich damit zu beschäftigen.
Ich finde, OnePage_XH ist eine tolle Erweiterung für CMSimple_XH, kein anderer CMSimple-Klone kann ähnliches vorweisen. Wäre schade, wenn dieses Plugin an einem Scroll-Script scheitern würde
Ja, ich habe des für den einen Fall mit jQuery gelöst. Aber nach der von Frank gestarteten Diskussion konnte ich jetzt die selben Probleme / Schwachpunkte feststellen. Die in seiner Demo und in der Diskussion genannten Ideen bzw. Lösungen habe ich dann gleich versucht zu berücksichtigen. Dafür musste ich aber ein paar Änderungen am Code des OnePage-Plugins machen.
Das JS ist ziemlich simpel:
Code: Select all
$(document).ready(function(){
//Smooth-Scroll für alle Links die mit "#" beginnen
//$('a[href^="#"]').on('click',function (e) {
//NEIN. Besser mit expliziter Klasse "scrollTo" direkt in li() generiert!
$('a.scrollTo').on('click',function (e) {
e.preventDefault();
var target = this.hash;
var $target = $(target);
$('html, body').stop().animate({
'scrollTop': $target.offset().top
}, 300, 'swing', function () {
//Hashes an URL anhängen? Eventuell optional?
window.location.hash = target;
});
});
//Top-Link ein- / ausblenden
//oder besser mit Wechsel der CSS-Klassen wie bisher?
$(window).scroll(function(){
if ($(this).scrollTop() > 300) {
$('#onepage_toplink').fadeIn();
} else {
$('#onepage_toplink').fadeOut();
}
});
//Smooth-Scroll bei Klick auf ID
$('#onepage_toplink').click(function(){
$('html, body').animate({scrollTop : 0}, 500);
return false;
});
});
Smooth-Scrolling zu IDs wird jetzt nur angewendet, wenn der Link die Klasse "scrollTo" enthält. Der Code für den Top-Link verwendet derzeit keine Klassen zum verstecken bzw. anzeigen des Links. Das könnte man aber noch ändern (ein einfaches toggleClass() ), falls die alte Variante besser geeignet ist.
Das JS wird im Edit-Modus nicht geladen, so gibt es keine Probleme bei der Bearbeitung der Seiten. Allerdings muss der Top-Link dann initial per CSS versteckt sein, da er ansonsten evtl. über dem Editor angezeigt wird.
Änderungen in Li.php
- renderAnchorStartTag($i) liefert jetzt links mit der Klasse "scrollTo"
Code: Select all
function renderAnchorStartTag($i)
{
//HI $x = $this->shallOpenInNewWindow($i) ? '" target="_blank' : '';
$x = $this->shallOpenInNewWindow($i) ? '" target="_blank' : '" class="scrollTo';
return $this->anchor($this->ta[$i], $x);
}
Code: Select all
protected function anchor($i, $x)
{
global $sn, $u, $cf, $edit, $plugin_cf;
//HI $html = '<a href="' . $sn;
$html = '<a href="';
if (XH_ADM && !$edit) {
//HI $html .= '?' . $u[$i];
$html .= $sn . '?' . $u[$i];
}
$html .= (XH_ADM && $edit) ? '?' : '#';
if (isset($u[$i])) {
if ($plugin_cf['onepage']['url_numeric'] && !(XH_ADM && $edit)) {
$html .= $i;
} else {
$html .= $u[$i];
}
}
$html .= $x . '">';
return $html;
}
}
in dispatch(): JS im Edit-Mode erst überhaupt nicht laden...
Code: Select all
public static function dispatch()
{
global $edit, $plugin_cf;
if (!$edit) //HI
self::emitJavaScript();
if (XH_ADM) {
if ($edit) {
$template = trim($plugin_cf['onepage']['admin_template']);
if ($template != '') {
self::setTemplate($template);
}
}
if (function_exists('XH_registerStandardPluginMenuItems')) {
XH_registerStandardPluginMenuItems(false);
}
if (self::isAdministrationRequested()) {
self::handleAdministration();
}
}
}
LG
Holger