2017-08-29 2 views
1

Ich arbeite an einem Modul, wo, wenn ein Benutzer PDF-Dateien in einem Container liest, der Fortschrittsbalken den Effekt basierend auf der Bildlaufleiste des Containers zeigt. Irgendwie hat die Fortschrittsleiste keinen Effekt, wenn der Benutzer nach unten oder oben scrollt.Progressbar funktioniert nicht beim Scrollen

Hier ist mein HTML-Teil für sie,

<div id="viewer" class="pdf-viewer" oncontextmenu="return false" data-url="../sadmin/studyMaterial/<?php echo $db->idToField("tbl_studymaterials", "file_ppt", $chapterId) ; ?>"></div> 
<span><progress id="progressbar" value="0" max="100" width="100%"></progress></span> 

Und hier geht meine JS für rolle,

<script> 
var viewer = document.getElementById('viewer'); 
viewer.addEventListener('scroll', function() { 
     var s = this.scrollTop, 
     d = this.scrollHeight, 
     c = this.clientHeight, 
     position = (s/(d - c)) * 100;  
    document.getElementById('progressbar').value = position; 
}); 
</script> 

ich viel ausprobiert haben und sah oft aber scheint es keinen Erfolg ist auf dieser Teil. Kann jemand vorschlagen, wo der fehlende Teil ist und warum er nicht die gewünschten Ergebnisse zeigt? Ich bin ein Neuling in JS und kämpfe darum, zu verwalten. Jeder Rat oder jede Hilfe wird sehr geschätzt. Danke im Voraus.

+2

Ihr Code funktioniert gut =) https://codepen.io/RudManusachi/pen/VzENXE vielleicht etwas falsch mit CSS? –

Antwort

0

Hier ist ein funktionierendes Beispiel:

var viewer = document.getElementById('viewer'); 
 

 
    viewer.addEventListener('scroll', function() { 
 
     var s = this.scrollTop, 
 
     d = this.scrollHeight, 
 
     c = this.clientHeight, 
 
     position = (s/(d - c)) * 100; 
 
     document.getElementById('progressbar').value = position; 
 
    });
#viewer{ 
 
     height: 100px; 
 
     width: 500px; 
 
     border: 1px solid #565656; 
 
     overflow-x: hidden; 
 
     overflow-y: auto; 
 
    } 
 
<div id = "viewer" class = "pdf-viewer" oncontextmenu="return false" data-url="../sadmin/studyMaterial/<?php echo $db->idToField('tbl_studymaterials', 'file_ppt', $chapterId); ?>"> 
 
    aaaaaaaaaa aaaaaaaa aaaaaaaaaaa aaaaaaa aaaaaaa aaaaaaaaa aaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaa aaaaaaa aaaaaaa aaaaaaaaaaaa aaaaaaaaaa aaaaaaaaaaaa aaaaaaaa aaaaaa aaaaaaa aaaaaaaa aaaaaaa aaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa aaaaaaaaa aaaaaa aaaaaaaa aaaaaaa aaaaaa aaaaaaaaaaa aaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaa aaaaaaaa aaaaaaaaaa aaaaaaaaa aaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaa aaaaaaaaaaa aaaaaaaaaa aaaaaaaaaaaaa aaaaaaaaaaaaa aaaaaaa aaaaaaaa aaaaa aaaa aaaaaaaaaaaa aaaaaaaaa 
 
</div> 
 
<span> 
 
    <progress id="progressbar" value="0" max="100" width="100%"> 
 
    </progress> 
 
</span>

+0

Vielen Dank für die wertvolle Zeit. Ich bin nicht in der Lage, diesen bestimmten #Viewer in CSS zu finden. Kann ich das mit der Klasse bekommen? Welche Änderungen muss ich vornehmen? @ Adda82 – Ansh

+0

Der Trick besteht darin, feste Höhe und Überlauf hinzuzufügen: versteckt für das Bildlaufelement. In meinem Beispiel ist das der #Viewer. Ich nehme an, Sie werden die PDF in diesem Element haben. Dann sehen Sie die Schriftrolle und Sie haben bereits die JavaScript-Funktion, die beim Scrollen auslöst. Ich hoffe, das hilft. – adda82

+0

Noch kein Erfolg @ adda82 – Ansh

0

Ich denke, Ihr Problem ist, dass Sie den Bildlauflistener zum Viewer hinzufügen, und der Viewer hat keine Bildlaufleiste, was bedeutet, dass das Ereignis nicht in diesem div ausgelöst wird, es auf das Fenster oder einen übergeordneten Container ausgelöst wird Element, denn wenn ich diesen Stil für den Betrachter hinzufügen, snipet der Code funktioniert

#viewer { 
    height: 300px; 
    overflow: auto; 
} 
feinen

Deshalb schlage ich für Sie, um das Element zu suchen, was die Bildlaufleiste und den Ereignis-Listener (vielleicht zu diesem Element hinzufügen Sie müssen die Berechnungen umschreiben, aber das ist eine Lösung), oder Sie geben Ihrem div eine Höhe.

+0

Danke für die wertvolle Zeit. Ich bin nicht in der Lage, diesen bestimmten #Viewer in CSS zu finden. Kann ich das mit der Klasse bekommen? Welche Änderungen muss ich machen, um – Ansh

+0

Ich weiß nicht wirklich, wie Ihr CSS funktioniert, weil die Hauptsache ist, dass Sie Ihre div Scroll-fähig machen müssen. aber Sie können hinzufügen, was ich in Ihre CSS-Datei geschrieben, und ändern Sie die Höhe entsprechend Ihrem Design –

Verwandte Themen