Hoje vou apresentar a vocês uma ferramenta de captura de tela (como avatar, etc.) que é frequentemente usada na web:
JcropDemo
Estrutura do projeto:
Renderização:
Isso é útil:
Depois de ver isso, todos querem experimentar por si mesmos.
===========================================
Parte do código:
===========================================
Preparação:
Baixar: Jcrop-0.9.10 (formato zip)
Descompacte e coloque em seu projeto, assim como a estrutura do projeto acima...
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial1.html
Copie o código do código da seguinte forma:
<!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">
<cabeça>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriais » Olá Mundo</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="texto/javascript">
jQuery(função($){
// Quão fácil é isso??
$('#target').Jcrop();
});
</script>
</head>
<corpo>
<div id="externo">
<div>
<div>
<h1>Jcrop - Olá, mundo</h1>
<img src="demo_files/pool.jpg" id="target" />
<p>
<b>Este exemplo demonstra o comportamento padrão do Jcrop.</b>
Como nenhum manipulador de eventos foi anexado, ele apenas executa
o comportamento de cultivo.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Página inicial do Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manual (Documentos)</a>
</div>
</div>
</div>
</div>
</body>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial2.html
Copie o código do código da seguinte forma:
<!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">
<cabeça>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriais » Manipulador de eventos</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="texto/javascript">
jQuery(função($){
$('#alvo').Jcrop({
onChange: mostrarCoords,
onSelect: mostrarCoords,
onRelease: clearCoords
});
});
// Manipulador de eventos simples, chamado de onChange e onSelect
// manipuladores de eventos, conforme a invocação do Jcrop acima
função mostrarCoords(c)
{
$('#x1').val(cx);
$('#y1').val(cy);
$('#x2').val(c.x2);
$('#y2').val(c.y2);
$('#w').val(cw);
$('#h').val(ch);
};
função clearCoords()
{
$('#coords input').val('');
};
</script>
</head>
<corpo>
<div id="externo">
<div>
<div>
<h1>Jcrop - manipuladores de eventos</h1>
<!-- Esta é a imagem à qual estamos anexando o Jcrop -->
<img src="demo_files/pool.jpg" id="target" />
<!-- Este é o formulário que nosso manipulador de eventos preenche -->
<form id="coords"
classe = "coordenadas"
onsubmit="retornar falso;"
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>Um exemplo com um manipulador de eventos básico.</b> Aqui empatamos
vários valores de formulário junto com uma simples invocação do manipulador de eventos.
O resultado é que os valores do formulário são atualizados em tempo real conforme
a seleção é alterada usando o manipulador <em>onChange</em> do Jcrop.
</p>
<p>
É assim que o Jcrop pode ser facilmente integrado a um formulário web tradicional!
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Página inicial do Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manual (Documentos)</a>
</div>
</div>
</div>
</div>
</body>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial3.html
Copie o código do código da seguinte forma:
<!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">
<cabeça>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop »Tutoriais» AspectRatio com visualização</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="texto/javascript">
jQuery(função($){
// Cria variáveis (neste escopo) para armazenar a API e o tamanho da imagem
var jcrop_api,boundx,boundy;
$('#alvo').Jcrop({
onChange: atualizaçãoPreview,
onSelect: atualizaçãoPreview,
proporção de aspecto: 1
}, função() {
//Use a API para obter o tamanho real da imagem
var limites = this.getBounds();
limitex = limites[0];
limite = limites[1];
// Armazena a API na variável jcrop_api
jcrop_api = isto;
});
função atualizaçãoPreview(c) {
if (parseInt(cw) > 0) {
var rx = 100/cw;
var ry = 100/ch;
$('#preview').css({
largura: Math.round(rx *boundx) + 'px',
altura: Math.round(ry *boundy) + 'px',
margemEsquerda: '-' + Math.round(rx * cx) + 'px',
marginTop: '-' + Math.round(ry * cy) + 'px'
});
}
}
});
</script>
</head>
<corpo>
<div id="externo">
<div>
<div>
<h1>Jcrop - Proporção com painel de visualização</h1>
<tabela>
<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>
</tabela>
<p>
<b>Um exemplo de implementação de um painel de visualização.</b> Obviamente, a demonstração mais visual, o painel de visualização é realizado inteiramente fora do Jcrop com um simples retorno de chamada no estilo jQuery. Esse tipo de interface pode ser útil para criar uma miniatura ou avatar. . O manipulador de eventos onChange é usado para atualizar a visualização no painel de visualização.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Página inicial do Jcrop</a> | <a href="http://deepliquid.com/content/Jcrop_Manual.html">Manual (Documentos )</a>
</div>
</div>
</div>
</div>
</body>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial4.html
Copie o código do código da seguinte forma:
<!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">
<cabeça>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriais » Animações/Transições</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="texto/javascript">
jQuery(função($){
var jcrop_api;
$('#alvo').Jcrop({
bgFade: verdadeiro,
bgOpacidade: 0,3,
definirSelecionar: [60, 70, 540, 330]
},função(){
jcrop_api = isto;
});
$('#fadetog').change(function(){
jcrop_api.setOptions({
bgFade: this.checked
});
}).attr('verificado','verificado');
$('#shadetog').change(function(){
if (this.checked) $('#shadetxt').slideDown();
senão $('#shadetxt').slideUp();
jcrop_api.setOptions({
sombra: this.checked
});
}).attr('verificado',falso);
//Definir seções da página
var seções = {
anim_buttons: 'Animar seleção',
bgo_buttons: 'Alterar bgOpacity',
bgc_buttons: 'Alterar cor do bg'
};
//Definir botões de animação
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]
};
//Definir botões bgOpacity
var bgo = {
Baixo: 0,2,
Médio: 0,5,
Alto: 0,8,
Completo: 1
};
//Definir botões bgColor
var bgc = {
Vermelho: '#900',
Azul: '#4BB6F0',
Amarelo: '#F0B207',
Verde: '#46B81C',
Branco: 'branco',
Preto: 'preto'
};
// Cria alvos de fieldset para botões
para (i em seções)
insertSection(i,seções[i]);
// Cria botões de animação
para(eu em ac) {
$('#anim_buttons').append(
$('<botão />').append(i).click(animHandler(ac[i])), ' '
);
}
// Cria botões bgOpacity
para(eu em bgo) {
$('#bgo_buttons').append(
$('<botão />').append(i).click(setoptHandler('bgOpacity',bgo[i])), ' '
);
}
// Cria botões bgColor
para(eu em bgc) {
$('#bgc_buttons').append(
$('<botão />').append(i).css({
cor de fundo: bgc[i],
cor: ((i == 'Preto') || (i == 'Vermelho'))?'branco':'preto'
}).click(setoptHandler('bgColor',bgc[i])), ' '
);
}
//Função para inserir seções nomeadas na interface
função inserirSeção(k,v) {
$('#interface').append(
$('<fieldset></fieldset>').attr('id',k).append(
$('<legend></legend>').append(v)
)
);
};
// Manipulador para botões de configuração de opções
função setoptHandler(k,v) {
função de retorno() {
var opt = { };
optar[k] = v;
jcrop_api.setOptions(optar);
retornar falso;
};
};
// Manipulador para botões de animação
função animHandler(v) {
função de retorno() {
jcrop_api.animateTo(v);
retornar falso;
};
};
$('#anim_buttons').append(
$('<button></button>').append('Tchau!').click(function(){
jcrop_api.animateTo(
[300.200.300.200],
função(){ this.release() };
);
retornar falso;
})
);
$('#interface').show();
});
</script>
</head>
<corpo>
<div id="externo">
<div>
<div>
<h1>Jcrop - Animações/Transições</h1>
<img src="demo_files/sago.jpg" id="target" />
<div id="interface" style="margem: 1em 0;"></div>
<div><label><input type="checkbox" id="fadetog" /> Ativar esmaecimento (bgFade: true)</label></div>
<div><label><input type="checkbox" id="shadetog" /> Usar shader experimental (shade: true)</label></div>
<p id="shadetxt" style="display:none; color:#900;">
<b>Sombreador experimental ativo.</b>
Jcrop agora inclui um modo de sombreamento que facilita a construção
melhores instâncias Jcrop transparentes O shader experimental é menor.
robusto que o método de sombreamento padrão do Jcrop e só deve ser
usado se você precisar dessa funcionalidade.
</p>
<p>
<b>Animação/Transições.</b>
Demonstração do método animateTo API e transições para bgColor
e as opções bgOpacity O desbotamento da cor requer a inclusão das opções de John Resig.
jQuery <a href="http://plugins.jquery.com/project/color">Cor
Plugin de animações</a> Se não estiver incluído, as cores não desaparecerão.
</p>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Página inicial do Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manual (Documentos)</a>
</div>
</div>
</div>
</div>
</body>
</html>
/Jcrop/WebContent/tapmodo-Jcrop/demos/tutorial5.html
Copie o código do código da seguinte forma:
<!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">
<cabeça>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>Jcrop » Tutoriais » Demonstração da 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="texto/css">
.optdual {posição: relativo};
.optdual .offset { posição: absoluta esquerda: 18em }
.optlist rótulo {largura: 16em; display: bloco};
#dl_links {margem superior: .5em};
</estilo>
<script type="texto/javascript">
jQuery(função($){
// A variável jcrop_api conterá uma referência ao
// API Jcrop assim que o Jcrop for instanciado.
var jcrop_api;
// Neste exemplo, como o Jcrop pode ser anexado ou desanexado
// por capricho do usuário, envolvi a chamada em uma função
initJcrop();
//A função é bem simples
função initJcrop()//{{{
{
// Oculta quaisquer elementos da interface que exijam Jcrop
// (Isto é para a parte da interface do usuário local.)
$('.requiresjcrop').hide();
//Invoca Jcrop de maneira típica
$('#alvo').Jcrop({
onRelease: releaseCheck
},função(){
jcrop_api = isto;
jcrop_api.animateTo([100.100.400.300]);
//Configura e exibe a interface para "habilitada"
$('#can_click,#can_move,#can_size').attr('verificado','verificado');
$('#ar_lock,#size_lock,#bg_swap').attr('verificado',falso);
$('.requiresjcrop').show();
});
};
//}}}
// Use a API para encontrar dimensões de corte
// Em seguida, gera uma seleção aleatória
// Esta função é usada pelos botões setSelect e animateTo
// Principalmente para fins de demonstração
função getRandom() {
var dim = jcrop_api.getBounds();
retornar [
Math.round(Math.random() * dim[0]),
Math.round(Math.random() * dim[1]),
Math.round(Math.random() * dim[0]),
Math.round(Math.random() * dim[1])
];
};
// Esta função está vinculada ao manipulador onRelease...
// Em certas circunstâncias (como se você definisse minSize
// e AspectRatio juntos), você pode perder inadvertidamente
// a seleção. Este retorno de chamada reativa a criação de seleções.
// nesse caso. Embora a necessidade de fazer isso seja baseada em um
// comportamento bugado, é recomendado que você de alguma forma prenda
// o retorno de chamada onRelease se você usar permitirSelect: false
função releaseCheck()
{
jcrop_api.setOptions({ permitirSelect: verdadeiro });
$('#can_click').attr('verificado',falso);
};
//Anexar botões de interface
// Isso pode parecer muito código, mas é algo simples
$('#setSelect').click(função(e) {
// Define uma seleção aleatória
jcrop_api.setSelect(getRandom());
});
$('#animateTo').click(function(e) {
// Anima para uma seleção aleatória
jcrop_api.animateTo(getRandom());
});
$('#release').click(função(e) {
//O método Release limpa a seleção
jcrop_api.release();
});
$('#desativar').click(função(e) {
// Desativa a instância Jcrop
jcrop_api.disable();
//Atualiza a interface para refletir o estado desabilitado
$('#enable').show();
$('.requiresjcrop').hide();
});
$('#enable').click(function(e) {
//Reativa a instância Jcrop
jcrop_api.enable();
//Atualiza a interface para refletir o estado habilitado
$('#enable').hide();
$('.requiresjcrop').show();
});
$('#rehook').click(function(e) {
// Este botão fica visível quando o Jcrop foi destruído
// Realiza a re-anexação e atualiza a UI
$('#rehook,#enable').hide();
initJcrop();
$('#unhook,.requiresjcrop').show();
retornar falso;
});
$('#desengatar').click(function(e) {
// Destrua o widget Jcrop, restaure o estado original
jcrop_api.destroy();
//Atualiza a interface para refletir o estado não anexado
$('#unhook,#enable,.requiresjcrop').hide();
$('#reganhar').show();
retornar falso;
});
//Conecte os três botões de troca de imagens
$('#img1').click(função(e) {
jcrop_api.setImage('demo_files/sago.jpg');
jcrop_api.setOptions({ bgOpacity: .6 });
retornar falso;
});
$('#img2').click(função(e) {
jcrop_api.setImage('demo_files/pool.jpg');
jcrop_api.setOptions({ bgOpacity: .6 });
retornar falso;
});
$('#img3').click(função(e) {
jcrop_api.setImage('demo_files/sago.jpg',function(){
this.setOptions({
bgOpacidade: 1,
imagem externa: 'demo_files/sagomod.jpg'
});
this.animateTo(getRandom());
});
retornar falso;
});
// As caixas de seleção simplesmente definem opções com base no valor marcado
// As opções são alteradas passando um novo objeto de opções
// Além disso, para evitar comportamentos estranhos, eles são verificados inicialmente
// Isso corresponde ao estado inicial padrão do Jcrop
$('#can_click').change(function(e) {
jcrop_api.setOptions({ permitirSelect: !!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(função(e) {
jcrop_api.setOptions(this.checked?
{ aspectoRatio: 4/3 }: { aspectoRatio: 0 });
jcrop_api.focus();
});
$('#size_lock').change(function(e) {
jcrop_api.setOptions(this.checked? {
Tamanho mínimo: [80, 80],
tamanho máximo: [350, 350]
}: {
tamanho mínimo: [0, 0],
tamanho máximo: [0, 0]
});
jcrop_api.focus();
});
});
</script>
</head>
<corpo>
<div id="externo">
<div>
<div>
<h1>Jcrop - Demonstração da API</h1>
<img src="demo_files/sago.jpg" id="target" />
<div style="margem: .8em 0 .5em;">
<span>
<button id="setSelect">setSelect</button>
<button id="animateTo">animateTo</button>
<button id="release">Liberar</button>
<button id="disable">Desativar</button>
</span>
<button id="enable" style="display:none;">Reativar</button>
<button id="unhook">Destrua!</button>
<button id="rehook" style="display:none;">Anexar Jcrop</button>
</div>
<conjunto de campos>
<legend>Alterna opções</legend>
<div>
<label><input type="checkbox" id="ar_lock" />Proporção</label>
<label><input type="checkbox" id="size_lock" />configuração minSize/maxSize</label>
</div>
<div>
<label><input type="checkbox" id="can_click" />Permitir novas seleções</label>
<label><input type="checkbox" id="can_move" />A seleção pode ser movida</label>
<label><input type="checkbox" id="can_size" />Seleção redimensionável</label>
</div>
</fieldset>
<fieldset style="margem: .5em 0;">
<legend>Alterar imagem</legend>
<span>
<button id="img2">Pool</button>
<button id="img1">Sago</button>
<button id="img3">Sago com imagem externa</button>
</span>
</fieldset>
<div id="dl_links">
<a href="http://deepliquid.com/content/Jcrop.html">Página inicial do Jcrop</a> |
<a href="http://deepliquid.com/content/Jcrop_Manual.html">Manual (Documentos)</a>
</div>
</div>
</div>
</div>
</body>
</html>