Aujourd'hui, je vais vous présenter un outil de capture d'écran (comme un avatar, etc.) souvent utilisé sur le web :
JcropDémo
Structure du projet :
Rendu :
C'est utile :
Après avoir vu cela, tout le monde veut l'essayer lui-même.
============================================
Partie codée :
============================================
Préparation:
Télécharger : Jcrop-0.9.10 (format zip)
Décompressez-le et insérez-le dans votre projet, tout comme la structure du projet ci-dessus...
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial1.html
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<tête>
<méta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriels » Hello World</title>
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/jquery.Jcrop.js" type="text/javascript"></script>
<link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="demo_files/demos.css" type="text/css" />
<script type="text/javascript">
jQuery(fonction($){
// Est-ce facile ??
$('#target').Jcrop();
});
</script>
</tête>
<corps>
<div id="extérieur">
<div>
<div>
<h1>Jcrop – Bonjour tout le monde</h1>
<img src="demo_files/pool.jpg" id="target" />
<p>
<b>Cet exemple montre le comportement par défaut de Jcrop.</b>
Puisqu'aucun gestionnaire d'événements n'a été attaché, il effectue uniquement
le comportement de culture.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Accueil Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manuel (Documents)</a>
</div>
</div>
</div>
</div>
</corps>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial2.html
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<tête>
<méta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriels » Gestionnaire d'événements</title>
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/jquery.Jcrop.js" type="text/javascript"></script>
<link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="demo_files/demos.css" type="text/css" />
<script type="text/javascript">
jQuery(fonction($){
$('#cible').Jcrop({
onChange : showCoords,
onSelect : showCoords,
onRelease : clearCoords
});
});
// Gestionnaire d'événements simple, appelé depuis onChange et onSelect
// gestionnaires d'événements, selon l'invocation Jcrop ci-dessus
fonction showCoords(c)
{
$('#x1').val(cx);
$('#y1').val(cy);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(cw);
$('#h').val(ch);
} ;
fonction clearCoords()
{
$('#coords input').val('');
} ;
</script>
</tête>
<corps>
<div id="extérieur">
<div>
<div>
<h1>Jcrop - Gestionnaires d'événements</h1>
<!-- C'est l'image à laquelle nous attachons Jcrop -->
<img src="demo_files/pool.jpg" id="target" />
<!-- C'est le formulaire que notre gestionnaire d'événements remplit -->
<form id="coords"
classe = "coordonnées"
onsubmit="retour faux;"
action="http://example.com/post.php">
<div>
<label>X1 <input type="text" size="4" id="x1" name="x1" /></label>
<label>Y1 <input type="text" size="4" id="y1" name="y1" /></label>
<label>X2 <input type="text" size="4" id="x2" name="x2" /></label>
<label>Y2 <input type="text" size="4" id="y2" name="y2" /></label>
<label>W <input type="text" size="4" id="w" name="w" /></label>
<label>H <input type="text" size="4" id="h" name="h" /></label>
</div>
</form>
<p>
<b>Un exemple avec un gestionnaire d'événements de base.</b> Ici, nous avons lié
plusieurs valeurs de formulaire avec un simple appel de gestionnaire d'événements.
Le résultat est que les valeurs du formulaire sont mises à jour en temps réel au fur et à mesure
la sélection est modifiée à l'aide du gestionnaire <em>onChange</em> de Jcrop.
</p>
<p>
C'est avec quelle facilité Jcrop peut être intégré dans un formulaire Web traditionnel !
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Accueil Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manuel (Documents)</a>
</div>
</div>
</div>
</div>
</corps>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial3.html
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<tête>
<méta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriels » aspectRatio avec aperçu</title>
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/jquery.Jcrop.js" type="text/javascript"></script>
<link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="demo_files/demos.css" type="text/css" />
<script type="text/javascript">
jQuery(fonction($) {
// Créer des variables (dans cette portée) pour contenir l'API et la taille de l'image
var jcrop_api,boundx,boundy;
$('#cible').Jcrop({
onChange : updatePreview,
onSelect : updatePreview,
rapport d'aspect : 1
}, fonction() {
// Utilisez l'API pour obtenir la taille réelle de l'image
var limites = this.getBounds();
boundx = limites[0];
limite = limites[1];
// Stocke l'API dans la variable jcrop_api
jcrop_api = ceci ;
});
fonction updatePreview(c) {
si (parseInt(cw) > 0) {
var rx = 100/cw ;
var ry = 100/ch;
$('#aperçu').css({
largeur : Math.round(rx *boundx) + 'px',
hauteur : Math.round(ry *boundy) + 'px',
marginLeft : '-' + Math.round(rx * cx) + 'px',
marginTop : '-' + Math.round(ry * cy) + 'px'
});
}
}
});
</script>
</tête>
<corps>
<div id="extérieur">
<div>
<div>
<h1>Jcrop – Rapport d'aspect avec volet d'aperçu</h1>
<tableau>
<tr>
<td>
<div>
<img src="demo_files/pool.jpg" id="target"/>
</div>
</td>
<td>
<div>
<img src="demo_files/pool.jpg" id="preview" />
</div>
</td>
</tr>
</table>
<p>
<b>Un exemple d'implémentation d'un volet de prévisualisation.</b> De toute évidence, la démo la plus visuelle, le volet de prévisualisation est entièrement réalisé en dehors de Jcrop avec un simple rappel à saveur jQuery. Ce type d'interface pourrait être utile pour créer une vignette ou un avatar. . Le gestionnaire d'événements onChange est utilisé pour mettre à jour la vue dans le volet d'aperçu.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Accueil Jcrop</a> | <a href="http://deepliquid.com/content/Jcrop_Manual.html">Manuel (Documents )</a>
</div>
</div>
</div>
</div>
</corps>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial4.html
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<tête>
<méta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriels » Animations / Transitions</title>
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/jquery.Jcrop.js" type="text/javascript"></script>
<script src="../js/jquery.color.js" type="text/javascript"></script>
<link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="../css/jquery.Jcrop.extras.css" type="text/css" />
<link rel="stylesheet" href="demo_files/demos.css" type="text/css" />
<script type="text/javascript">
jQuery(fonction($){
varjcrop_api;
$('#cible').Jcrop({
bgFade : vrai,
bgOpacité : 0,3,
setSelect : [60, 70, 540, 330]
},fonction(){
jcrop_api = ceci ;
});
$('#fadetog').change(function(){
jcrop_api.setOptions({
bgFade : this.checked
});
}).attr('vérifié','vérifié');
$('#shadetog').change(function(){
if (this.checked) $('#shadetxt').slideDown();
else $('#shadetxt').slideUp();
jcrop_api.setOptions({
teinte : this.checked
});
}).attr('checked',false);
// Définir les sections de page
var sections = {
anim_buttons : 'Animer la sélection',
bgo_buttons : 'Modifier bgOpacity',
bgc_buttons : 'Changer bgColor'
} ;
// Définir les boutons d'animation
var ac = {
anim1 : [217 122 382 284],
anim2 : [20,20,580,380],
anim3 : [24,24,176,376],
anim4 : [347 165 550 355],
anim5 : [136,55,472,183]
} ;
// Définir les boutons bgOpacity
var bgo = {
Faible : 0,2,
Milieu : 0,5,
Élevé : 0,8,
Plein : 1
} ;
// Définir les boutons bgColor
var bgc = {
Rouge : '#900',
Bleu : '#4BB6F0',
Jaune : '#F0B207',
Vert : '#46B81C',
Blanc : 'blanc',
Noir : « noir »
} ;
// Créer des cibles de champs pour les boutons
pour (i en sections)
insertSection(i,sections[i]);
// Créer des boutons d'animation
pour (je en ac) {
$('#anim_buttons').append(
$('<bouton />').append(i).click(animHandler(ac[i])), ' '
);
}
// Créer des boutons bgOpacity
pour (je dans bgo) {
$('#bgo_buttons').append(
$('<bouton />').append(i).click(setoptHandler('bgOpacity',bgo[i])), ' '
);
}
// Crée des boutons bgColor
pour (je dans bgc) {
$('#bgc_buttons').append(
$('<bouton />').append(i).css({
Couleur d'arrière-plan : bgc[i],
couleur : ((i == 'Noir') || (i == 'Rouge'))?'blanc':'noir'
}).click(setoptHandler('bgColor',bgc[i])), ' '
);
}
// Fonction pour insérer des sections nommées dans l'interface
fonction insertSection(k,v) {
$('#interface').append(
$('<fieldset></fieldset>').attr('id',k).append(
$('<légend></légend>').append(v)
)
);
} ;
// Gestionnaire des boutons de définition d'options
fonction setoptHandler(k,v) {
fonction de retour() {
var opt = {} ;
opt[k] = v;
jcrop_api.setOptions(opt);
renvoie faux ;
} ;
} ;
// Gestionnaire des boutons d'animation
fonction animHandler(v) {
fonction de retour() {
jcrop_api.animateTo(v);
renvoie faux ;
} ;
} ;
$('#anim_buttons').append(
$('<bouton></bouton>').append('Au revoir !').click(function(){
jcrop_api.animateTo(
[300 200 300 200],
function(){ this.release();
);
renvoie faux ;
})
);
$('#interface').show();
});
</script>
</tête>
<corps>
<div id="extérieur">
<div>
<div>
<h1>Jcrop - Animations/Transitions</h1>
<img src="demo_files/sago.jpg" id="target" />
<div id="interface" style="margin: 1em 0;"></div>
<div><label><input type="checkbox" id="fadetog" /> Activer le fondu (bgFade : true)</label></div>
<div><label><input type="checkbox" id="shadetog" /> Utiliser un shader expérimental (shade : true)</label></div>
<p id="shadetxt" style="display:none; color:#900;">
<b>Shader expérimental actif.</b>
Jcrop inclut désormais un mode d'ombrage qui facilite la construction
de meilleures instances Jcrop transparentes. Le shader expérimental est moindre.
robuste que la méthode d'ombrage par défaut de Jcrop et ne devrait être
utilisé si vous avez besoin de cette fonctionnalité.
</p>
<p>
<b>Animation/Transitions.</b>
Démonstration de la méthode API animateTo et des transitions pour bgColor
et les options bgOpacity. La décoloration nécessite l'inclusion des options de John Resig.
jQuery <a href="http://plugins.jquery.com/project/color">Couleur
Plugin Animations</a> S'il n'est pas inclus, les couleurs ne s'estomperont pas.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Accueil Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manuel (Documents)</a>
</div>
</div>
</div>
</div>
</corps>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial5.html
Copiez le code comme suit :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<tête>
<méta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriels » Démo API</title>
<script src="../js/jquery.min.js" type="text/javascript"></script>
<script src="../js/jquery.Jcrop.js" type="text/javascript"></script>
<link rel="stylesheet" href="../css/jquery.Jcrop.css" type="text/css" />
<link rel="stylesheet" href="demo_files/demos.css" type="text/css" />
<style type="text/css">
.optdual { position : relative }
.optdual .offset { position : absolue ; gauche : 18em ;
Étiquette .optlist {largeur : 16 em ; affichage : bloc }
#dl_links { marge-haut : .5em }
</style>
<script type="text/javascript">
jQuery(fonction($){
// La variable jcrop_api contiendra une référence au
// API Jcrop une fois Jcrop instancié.
varjcrop_api;
// Dans cet exemple, puisque Jcrop peut être attaché ou détaché
// au gré de l'utilisateur, j'ai encapsulé l'appel dans une fonction
initJcrop();
// La fonction est assez simple
fonction initJcrop()//{{{
{
// Masquer tous les éléments d'interface nécessitant Jcrop
// (Ceci concerne la partie de l'interface utilisateur locale.)
$('.requiresjcrop').hide();
// Invoque Jcrop de manière typique
$('#cible').Jcrop({
onRelease : releaseCheck
},fonction(){
jcrop_api = ceci ;
jcrop_api.animateTo([100,100,400,300]);
// Configure et affiche l'interface pour "activé"
$('#can_click,#can_move,#can_size').attr('checked','checked');
$('#ar_lock,#size_lock,#bg_swap').attr('checked',false);
$('.requiresjcrop').show();
});
} ;
//}}}
// Utiliser l'API pour trouver les dimensions de recadrage
// Génère ensuite une sélection aléatoire
// Cette fonction est utilisée par les boutons setSelect et animateTo
// Principalement à des fins de démonstration
fonction getRandom() {
var dim = jcrop_api.getBounds();
retour [
Math.round(Math.random() * dim[0]),
Math.round(Math.random() * dim[1]),
Math.round(Math.random() * dim[0]),
Math.round(Math.random() * dim[1])
];
} ;
// Cette fonction est liée au gestionnaire onRelease...
// Dans certaines circonstances (par exemple si vous définissez minSize
// et aspectRatio ensemble), vous pouvez perdre par inadvertance
// la sélection. Ce rappel réactive la création de sélections.
// dans un tel cas, bien que la nécessité de le faire soit basée sur un
// comportement bogué, il est recommandé de piéger d'une manière ou d'une autre
// le rappel onRelease si vous utilisez allowSelect : false
fonction releaseCheck()
{
jcrop_api.setOptions({allowSelect: true });
$('#can_click').attr('checked',false);
} ;
//Ajouter des boutons d'interface
// Cela peut sembler beaucoup de code mais c'est simple
$('#setSelect').click(function(e) {
// Définit une sélection aléatoire
jcrop_api.setSelect(getRandom());
});
$('#animateTo').click(function(e) {
// Anime selon une sélection aléatoire
jcrop_api.animateTo(getRandom());
});
$('#release').click(function(e) {
// La méthode Release efface la sélection
jcrop_api.release();
});
$('#disable').click(function(e) {
// Désactive l'instance Jcrop
jcrop_api.disable();
// Mise à jour de l'interface pour refléter l'état désactivé
$('#enable').show();
$('.requiresjcrop').hide();
});
$('#enable').click(function(e) {
// Réactivez l'instance Jcrop
jcrop_api.enable();
// Mettre à jour l'interface pour refléter l'état activé
$('#enable').hide();
$('.requiresjcrop').show();
});
$('#rehook').click(function(e) {
// Ce bouton est visible lorsque Jcrop a été détruit
// Il effectue le rattachement et met à jour l'interface utilisateur
$('#rehook,#enable').hide();
initJcrop();
$('#unhook,.requiresjcrop').show();
renvoie faux ;
});
$('#décrocher').click(function(e) {
// Détruire le widget Jcrop, restaurer l'état d'origine
jcrop_api.destroy();
// Mise à jour de l'interface pour refléter l'état non attaché
$('#unhook,#enable,.requiresjcrop').hide();
$('#rehook').show();
renvoie faux ;
});
// Branchez les trois boutons d'échange d'images
$('#img1').cliquez(fonction(e) {
jcrop_api.setImage('demo_files/sago.jpg');
jcrop_api.setOptions({ bgOpacity : .6 });
renvoie faux ;
});
$('#img2').cliquez(fonction(e) {
jcrop_api.setImage('demo_files/pool.jpg');
jcrop_api.setOptions({ bgOpacity : .6 });
renvoie faux ;
});
$('#img3').cliquez(fonction(e) {
jcrop_api.setImage('demo_files/sago.jpg',function(){
this.setOptions({
bgOpacité : 1,
Image externe : 'demo_files/sagomod.jpg'
});
this.animateTo(getRandom());
});
renvoie faux ;
});
// Les cases à cocher définissent simplement les options en fonction de la valeur cochée
// Les options sont modifiées en passant un nouvel objet options
// De plus, pour éviter tout comportement étrange, ils sont initialement vérifiés
// Cela correspond à l'état initial par défaut de Jcrop
$('#can_click').change(function(e) {
jcrop_api.setOptions({allowSelect: !!this.checked });
jcrop_api.focus();
});
$('#can_move').change(function(e) {
jcrop_api.setOptions({allowMove: !!this.checked });
jcrop_api.focus();
});
$('#can_size').change(function(e) {
jcrop_api.setOptions({allowResize: !!this.checked });
jcrop_api.focus();
});
$('#ar_lock').change(function(e) {
jcrop_api.setOptions(this.checked?
{ aspectRatio : 4/3 } : { aspectRatio : 0 });
jcrop_api.focus();
});
$('#size_lock').change(function(e) {
jcrop_api.setOptions(this.checked? {
Taille min : [80, 80],
Taille maximale : [350, 350]
} : {
Taille min : [0, 0],
taille maximale : [0, 0]
});
jcrop_api.focus();
});
});
</script>
</tête>
<corps>
<div id="extérieur">
<div>
<div>
<h1>Jcrop - Démo API</h1>
<img src="demo_files/sago.jpg" id="target" />
<div style="marge : .8em 0 .5em;">
<envergure>
<button id="setSelect">setSelect</button>
<button id="animateTo">animateTo</button>
<button id="release">Libérer</button>
<button id="disable">Désactiver</button>
</span>
<button id="enable" style="display:none;">Réactiver</button>
<button id="unhook">Détruisez !</button>
<button id="rehook" style="display:none;">Joindre Jcrop</button>
</div>
<ensemble de champs>
<legend>Activations d'options</legend>
<div>
<label><input type="checkbox" id="ar_lock" />Rapport d'aspect</label>
<label><input type="checkbox" id="size_lock" />paramètre minSize/maxSize</label>
</div>
<div>
<label><input type="checkbox" id="can_click" />Autoriser les nouvelles sélections</label>
<label><input type="checkbox" id="can_move" />La sélection peut être déplacée</label>
<label><input type="checkbox" id="can_size" />Sélection redimensionnable</label>
</div>
</fieldset>
<fieldset style="marge : .5em 0;">
<legend>Changer l'image</legend>
<envergure>
<button id="img2">Piscine</button>
<button id="img1">Sago</button>
<button id="img3">Sago avec externalImage</button>
</span>
</fieldset>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Accueil Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manuel (Documents)</a>
</div>
</div>
</div>
</div>
</corps>
</html>