begin process at 2012 05 28 14:49:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SCROLLBAR CLASS

SCROLLBAR CLASS


 Information sur la source

Note :
6 / 10 - par 1 personne
6,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :scrollbar, navbar, defilement, défilement, navigation Niveau :Initié Date de création :21/04/2011 Date de mise à jour :22/04/2011 12:00:03 Vu / téléchargé :2 984 / 225

Auteur : heycraft

Ecrire un message privé
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Cette classe permet d'afficher une scrollbar dans une div, d'en modifier la valeur ou de recuperer la valeur (en pourcentage) lorsque l'utilisateur fait bouger la bar.

Utilisation :

var bar = new Scrollbar('bar', 500, 'horizontal'); // 'bar' est l'ID d'une div et 500 sera la taille du scrollbar

bar.scroll(function(v){
// v est le pourcentage du la bar
// traitements ici
});

bar.setValue(50); // place la barre à 50 %

Source

  • /**
  • * Class Scrollbar
  • *
  • * @elementId string
  • * @elementId number
  • * @access public
  • */
  • function Scrollbar(elementId, size, type)
  • {
  • var
  • container = document.getElementById(elementId),
  • elem = document.createElement('div'),
  • subelem = document.createElement('div'),
  • ratio = 6, // Scroll size : 10%
  • direction;
  • // Si type est definie
  • if(typeof(type) == 'undefined')
  • direction = 'horizontal';
  • else
  • direction = type;
  • // Si size est definie
  • if(typeof(size) == 'number')
  • setStyle();
  • else
  • return;
  • /**
  • * Getter qui retourne la valeur actuelle de la scrollbar (en %)
  • * @access public
  • */
  • this.getValue = function()
  • {
  • var percentage = getPercentage();
  • return percentage;
  • }
  • /**
  • * Setteur qui definit la valeur de la scrollbar (en %) et la fait bouger
  • * @access public
  • */
  • this.setValue = function(percentage)
  • {
  • if(direction == 'horizontal')
  • elem.scrollLeft = setPercentage(percentage);
  • if(direction == 'vertical')
  • elem.scrollTop = setPercentage(percentage);
  • }
  • /**
  • * Gestion de l'evenement onscroll, appele une fonction avec le parametre pourcentage
  • * ex : scrollbar.scroll(function(v){*Votre code, v vaut le pourcentage du scroll*});
  • * @access public
  • */
  • this.scroll = function(method)
  • {
  • if(typeof(method) == 'function')
  • {
  • elem.onscroll = function(){
  • var percentage = getPercentage();
  • method(percentage);
  • }
  • }
  • }
  • /**
  • * Renvoie en pourcentage la valeur de la bar
  • * @access private
  • */
  • function getPercentage()
  • {
  • if(direction == 'horizontal')
  • return parseInt((elem.scrollLeft * 100) / (elem.scrollWidth - elem.offsetWidth));
  • else if(direction == 'vertical')
  • return parseInt((elem.scrollTop * 100) / (elem.scrollHeight - elem.offsetHeight));
  • }
  • /**
  • * Renvoie en pourcentage la valeur de la bar
  • * @access private
  • */
  • function setPercentage(percentage)
  • {
  • if(direction == 'horizontal')
  • return parseInt((percentage * (elem.scrollWidth - elem.offsetWidth)) / 100);
  • else if(direction == 'vertical')
  • return parseInt((percentage * (elem.scrollHeight - elem.offsetHeight)) / 100);
  • }
  • /**
  • * Defini la taille de l'objet
  • * @access private
  • */
  • function setStyle()
  • {
  • container.style.overflow = 'hidden';
  • if(direction == 'horizontal')
  • {
  • // Taille container
  • container.style.width = size + 'px';
  • container.style.height = '16px';
  • // Taille
  • elem.style.width = size + 'px';
  • subelem.style.width = (size * ratio) + 'px';
  • // On monte à 36px pour l'affichage sous IE 8, on utilise marginTop pour remonter le tout
  • elem.style.height = '36px';
  • elem.style.marginTop = '-20px';
  • // Evite l'affichage d'une bar verticale
  • elem.style.overflowX = 'auto';
  • elem.style.overflowY = 'hidden';
  • // On definit le sous element qui va influncer sur la taille du bouton et la precision
  • subelem.style.height = '36px';
  • }
  • else if(direction == 'vertical')
  • {
  • // Taille container
  • container.style.height = size + 'px';
  • container.style.width = '16px';
  • // Taille
  • elem.style.height = size + 'px';
  • subelem.style.height = (size * ratio) + 'px';
  • // On monte à 36px pour l'affichage sous IE 8, on utilise marginTop pour remonter le tout
  • elem.style.width = '36px';
  • elem.style.marginLeft = '-20px';
  • // Evite l'affichage d'une bar verticale
  • elem.style.overflowY = 'auto';
  • elem.style.overflowX = 'hidden';
  • // On definit le sous element qui va influncer sur la taille du bouton et la precision
  • subelem.style.width = '36px';
  • }
  • elem.appendChild(subelem);
  • container.appendChild(elem);
  • }
  • }
/**
 * Class Scrollbar
 * 
 * @elementId string
 * @elementId number
 * @access public
 */
function Scrollbar(elementId, size, type)
{
	var 
		container = document.getElementById(elementId),
		elem = document.createElement('div'),
		subelem = document.createElement('div'),
		ratio = 6, // Scroll size : 10%
		direction;
		
	
		
	// Si type est definie
	if(typeof(type) == 'undefined')
		direction = 'horizontal';
	else
		direction = type;
		
	// Si size est definie
	if(typeof(size) == 'number')
		setStyle();
	else
		return;
		
	
		
	/**
	 * Getter qui retourne la valeur actuelle de la scrollbar (en %)
	 * @access public
	 */
	this.getValue = function()
	{
		var percentage = getPercentage();
		return percentage;	
	}
	
	
	/**
	 * Setteur qui definit la valeur de la scrollbar (en %) et la fait bouger
	 * @access public
	 */
	this.setValue = function(percentage)
	{
		if(direction == 'horizontal')
			elem.scrollLeft = setPercentage(percentage);
		if(direction == 'vertical')
			elem.scrollTop = setPercentage(percentage);
	}
	
	
	/**
	 * Gestion de l'evenement onscroll, appele une fonction avec le parametre pourcentage
	 * ex : scrollbar.scroll(function(v){*Votre code, v vaut le pourcentage du scroll*});
	 * @access public
	 */
	this.scroll = function(method)
	{
		if(typeof(method) == 'function')
		{
			elem.onscroll = function(){
				
				var percentage = getPercentage();
				
				method(percentage);
			}
		}
	}	
	
	
	/**
	 * Renvoie en pourcentage la valeur de la bar
	 * @access private
	 */
	function getPercentage()
	{
		if(direction == 'horizontal')
			return parseInt((elem.scrollLeft * 100) / (elem.scrollWidth - elem.offsetWidth));
		else if(direction == 'vertical')
			return parseInt((elem.scrollTop * 100) / (elem.scrollHeight - elem.offsetHeight));
	}
	
	
	/**
	 * Renvoie en pourcentage la valeur de la bar
	 * @access private
	 */
	function setPercentage(percentage)
	{
		if(direction == 'horizontal')
			return parseInt((percentage * (elem.scrollWidth - elem.offsetWidth)) / 100);
		else if(direction == 'vertical')
			return parseInt((percentage * (elem.scrollHeight - elem.offsetHeight)) / 100);
	}
	
	
	
	/**
	 * Defini la taille de l'objet
	 * @access private
	 */
	function setStyle()
	{
		container.style.overflow = 'hidden';
		
		if(direction == 'horizontal')
		{
			// Taille container
			container.style.width = size + 'px';
			container.style.height = '16px';
			
			// Taille
			elem.style.width = size + 'px';
			subelem.style.width = (size * ratio) + 'px';
			
			// On monte à 36px pour l'affichage sous IE 8, on utilise marginTop pour remonter le tout
			elem.style.height = '36px';
			elem.style.marginTop = '-20px';
			
			// Evite l'affichage d'une bar verticale
			elem.style.overflowX = 'auto';
			elem.style.overflowY = 'hidden';
			
			// On definit le sous element qui va influncer sur la taille du bouton et la precision
			subelem.style.height = '36px';
		}
		else if(direction == 'vertical')
		{
			// Taille container
			container.style.height = size + 'px';
			container.style.width = '16px';
			
			// Taille
			elem.style.height = size + 'px';
			subelem.style.height = (size * ratio) + 'px';
			
			// On monte à 36px pour l'affichage sous IE 8, on utilise marginTop pour remonter le tout
			elem.style.width = '36px';
			elem.style.marginLeft = '-20px';
			
			// Evite l'affichage d'une bar verticale
			elem.style.overflowY = 'auto';
			elem.style.overflowX = 'hidden';
			
			// On definit le sous element qui va influncer sur la taille du bouton et la precision
			subelem.style.width = '36px';
		}
		
		elem.appendChild(subelem);
		container.appendChild(elem);
	}
}

 Conclusion

Modification terminées !

Fonctionne sous Firefox 4, Chrome 9, IE 8 (7 en mode de compatibilité), Opera 11 et Safari 5
Certainement sous les versions antérieures aussi sauf pour IE (mais pas testé).

Par default horizontal, mais on peut definir le type vertical.
Paramètre size obligatoire !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

21 avril 2011 12:50:20 :
Ajout du ZIP
21 avril 2011 12:52:44 :
Exemple d'utilisation
22 avril 2011 11:31:41 :
Mise à jour pour le bug sous Safari/Opera/Chrome Reduction taille a 14px Fonctionne sous IE 8
22 avril 2011 12:00:03 :
Voir conclusion

 Sources du même auteur

SCRATCH AREA
RÉCUPERER LES VARIABLES $_GET
Source avec Zip JOLIE ALERTE AVEC "ALERT()"
Source avec Zip Source avec une capture SCRIPT DE PRÉCHARGEMENT D'IMAGES

 Sources de la même categorie

Source avec Zip Source avec une capture SLIDESHOW IMAGES ET TEXTES EN PUR JAVASCRIPT par ansuzpeorth
Source avec Zip INPUT TEXT AUTOMATIQUE CREATION SUPPRESSION par lycanges
Source avec Zip Source avec une capture TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEM... par synanceia
COLONNES ADAPTABLES EN HAUTEUR par dronoide
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES par william voirol

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SCROLLBAR PERSONNALISABLE par kazma
Source avec Zip Source avec une capture NAVIGATEUR INTERNET HAVRET par HAVRETos
Source avec Zip Source avec une capture SCROLL BARS EN JAVASCRIPT SUR UNE PAGE HTML par Glennouchet
Source avec Zip Source avec une capture DEFILEMENT A LA IPHONE par kazma
Source avec Zip Source avec une capture (OBJET) SCROLLBAR par PhiL666

Commentaires et avis

Commentaire de LeFauve42 le 26/04/2011 13:58:36 6/10

Bonjour,

Ton code est tres clair, mais j'ai quelques remarques :
- Pourquoi creer les methodes dans le constructeur en les rajoutant a chaque object plutot qu'utiliser le prototype de ta classe ?
- Plutot que de dupliquer tout ton code pour les cas "horizontal" et "vertical", pourquoi ne pas juste stocker les noms d'attribut a utiliser pour chaque cas. Par exemple, si dans ton constructeur tu changes :
// Si type est definie
if(typeof(type) == 'undefined')
direction = 'horizontal';
else
direction = type;

par :
switch(type)
{
  case 'vertical':
    direction = 'vertical';
    this.scrollLeftTop = 'scrollTop';
    this.scrollWidthHeight = 'scrollHeight';
    this.offsetWidthHeight = 'offsetHeight';
    // Autres proprietes utiles
    break;
  default: // horizontal pour les autres valeurs
    direction = 'horizontal';
    this.scrollLeftTop = 'scrollLeft';
    this.scrollWidthHeight = 'scrollWidth';
    this.offsetWidthHeight = 'offsetWidth';
    // Autres proprietes utiles
  
tes autres methodes deviennent beaucoup plus simples (et plus rapides). Par exemple :
this.setValue = function(percentage)
{
    elem[this.scrollLeftTop] = setPercentage(percentage);
}

function getPercentage()
{
    return parseInt((elem[this.scrollLeftTop] * 100) / (elem[this.scrollWidthHeight] - elem[this.offsetWidthHeight]));
}

etc...

Eric

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Pb affichage barre de défilement [ par Jossdoit ] Bonjoiur, Je travaille actuellement sur Dreamweaver pour faire une page web. Je voudrais changer l'aspect de ma barre de défilement. Pour cela g utili Pb d'affichage de la barre de défilement [ par Jossdoit ] Bonjour, Je travaille actuellement sur Dreamweaver pour faire une page web. Je voudrais changer l'aspect de ma barre de défilement. Pour cela g utilis Scrollbar automatique sous la sourie [ par maxmic ] Bonjour à tous,je cherche à faire un défilement autimatique sur mon iframe, enfin automatique si ma soris passe sur les fleche en haut et en bas de ma defilement de texte dans la navigation [ par ordipard ] salut, j'ai vu un jour sur un site que quand on déplaçait la barre de défilement, seul son texte bougeait et l'image de font restai sur place, je voud [Dreamweaver] Onglet avec scrollbar [ par grominnetto ] Bonjour tout le monde, voici, je tente de créer un site pour une école de hockey et j'aimerais avoir une barre de défilement (ou scrollbar) avec quel code de défilement des infos [ par hassen87 ] bonjour les amies je cherche un code jquery qui me permet de défiler un ensemble des div contenant des information de la base de données pour les actu Scrollbar confondue avec celle d' XP ? [ par steiny ] Bonjour à tous.Voici ma question : qq'un connaîtrait-il le code pour que la scrollbar de droite de mon site soit confondue avec celle du navigateur ?L changer la couleur de la scrollbar d'une listbox [ par anarogad ] Bonjour à tous,Je voudrais savoir s'il est possible de modifier la couleur des éléments qui constituent la scrollbar d'une listbox ?Merci d'avance pou Prbleme scrollbar [ par eks ] Bien le bonjour à tous,j'ai utilisé un script présent sur ce site (http://www.javascriptfr.com/code.aspx?ID=24142) sur mon site -> http://www.12mix Défilement automatique des pages d'un site ? [ par adelysnet ] Bonjour,Je souhaite faire défiler des pages d'un site automatiquement.Chaque page finirait par viewimage2.php?imageID=1&style=listing En fait, seule l


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,886 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales