Drag and Drop - mover e arrastar divs e elementos

Julho 25th, 2008 by micox

Prosseguindo com alguns códigos que uso sempre, abaixo mostro um drag-n-drop feito pelo tmferreira e corrigido por mim. Logicamente serve pra arrastar e mover elementos, divs, etc.

Uso ele quando não to afim de usar libs completas como o jquery.

Vou deixar direto o código completo até com o exemplo de uso. É só salvar o conteúdo abaixo como um arquivo HTML qualquer e testar. Pra ativar o drag-n-drop nos seus elementos e páginas, é só entender o exemplo e chamar a função dragdrop para os elementos que desejar.

<script>
//drag n drop de div ----------------------------------------------------
//by tmferreira - http://www.webly.com.br/tutorial/javascript-e-ajax/7045/drag-and-drop.htm
//corrigida 30/01/2008 por Micox - http://forum.ievolutionweb.com/index.php?s=&showtopic=7045&view=findpost&p=139679

var objSelecionado = null;
var mouseOffset = null;
function addEvent(obj, evType, fn) {
//Função adaptada da original de Christian Heilmann, em
//http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
if (typeof obj == "string") {
  if (null == (obj = document.getElementById(obj))) {
   throw new Error("Elemento HTML não encontrado. Não foi possível adicionar o evento.");
  }
}
if (obj.attachEvent) {
  return obj.attachEvent(("on" + evType), fn);
} else if (obj.addEventListener) {
  return obj.addEventListener(evType, fn, true);
} else {
  throw new Error("Seu browser não suporta adição de eventos. Senta, chora e pega um navegador mais recente.");
}
}
function mouseCoords(ev){
    if(typeof(ev.pageX)!=="undefined"){
      return {x:ev.pageX, y:ev.pageY};
    }else{
        return {
          x:ev.clientX + document.body.scrollLeft - document.body.clientLeft,
          y:ev.clientY + document.body.scrollTop  - document.body.clientTop
        };
    }
}
function getPosition(e, ev){
    var ev = ev || window.event;
    if(e.constructor==String){ e = document.getElementById(e);}
    var left = 0, top  = 0;
    var coords = mouseCoords(ev);    

    while (e.offsetParent){
      left += e.offsetLeft;
      top  += e.offsetTop;
      e     = e.offsetParent;
    }
    left += e.offsetLeft;
    top  += e.offsetTop;
    return {x: coords.x - left, y: coords.y - top};
}

function dragdrop(local_click, caixa_movida) {
//local click indica quem é o cara que quando movido, move o caixa_movida
    if(local_click.constructor==String){ local_click = document.getElementById(local_click);}
    if(caixa_movida.constructor==String){ caixa_movida = document.getElementById(caixa_movida);}

    local_click.style.cursor = 'move';
    if(!caixa_movida.style.position || caixa_movida.style.position=='static'){
        caixa_movida.style.position='relative'
    }
    local_click.onmousedown = function(ev) {
        objSelecionado = caixa_movida;
        mouseOffset = getPosition(objSelecionado, ev);
    };
    document.onmouseup = function() {
        objSelecionado = null;
    }
    document.onmousemove = function(ev) {
        if (objSelecionado) {
            var ev = ev || window.event;
            var mousePos = mouseCoords(ev);
            var pai = objSelecionado.parentNode;
            objSelecionado.style.left = (mousePos.x - mouseOffset.x - pai.offsetLeft) + 'px';
            objSelecionado.style.top = (mousePos.y - mouseOffset.y - pai.offsetTop) + 'px';
            objSelecionado.style.margin = '0px';
            return false;
        }
    }
}</script>
<body>
<!-- esta é a div de exemplo que será movida ao clicar no p de borda azul -->
<div id='movido' style='border: 1px solid black; width: 200px; '>
<p id='movedor' style='border: 1px solid blue;'>mova</p>
sou a div lálalá
<br />
lálálá
</div>
<!-- aqui o script chamando a função que ativa o drag'n'drop -->
<script>
dragdrop('movedor','movido');
</script>
</body>

Mini-lib CSS Reset do Micox - Sim ele voltou

Julho 25th, 2008 by micox

Helou senhores.
Muito tempo sem postar. Na verdade tava até pensando em abandonar o elmicox aqui, sei lá. Postar dá trabalho e toma tempo.

Mas daí lembrei que este troço aqui é meu repositório de códigos. Muito melhor que pastas do windows, muito melhor que zip, rar, melhor que ter que procurar em zilhoes de arquivos onde está a versão XYZ do meu script que faz ZXY.

Agora acho que vou deixar o elmicox aqui só pra códigos mesmo. Quando eu tiver opiniões e talz postarei lá no recentíssimo Blog do Webly.
Passem lá. Assinem-no.

Também deixarei de tentar monetizar o ElMicox. Site pra nerd não dá grana mesmo (Atenção aspirantes a pro-blogger ou fazedores de site em geral). O que dá dinheiro é o povão.

Então, back to work. Back to codes micox.

Vou postar algumas coisas que eu sempre uso em meus projetos. NADA INOVADOR não, é só para eu não perder nos mil arquivos/projetos.

TALVEZ, as coisas básicas que eu for postando estes últimos dias sirvam pra alguém. Talvez não.

Vou começar com uma tentativa minha de fazer um CSS reset. Tipo uma mini-lib CSS com o qual eu tenho iniciado meus últimos projetos. Ajuda bastante pra não ter que ficar redefinindo tuuuudo novamente a cada novo projeto.

Provavelmente os senhores webstandeiros aí têm as suas mini-libs também. Leiam a minha, adaptem, sugiram melhorias, implementem idéias minhas nas suas libs, troquemos conhecimentos.

Coloquei esquemas de zerar propriedades (css reset) padronizando nos diferentes navegadores; tamanhos de títulos; classes especiais pra posicionamento, pra simular tabelas, pra avisos, pra teclas de acesso, pra fazer wrapper, pra simular colunas, pra debugar (com bordas), pra fazer menus drop-down, e pra ativar o .hover e o first-child.

Leiam ae e vejam se aproveitam algo. Comentem pra eu ver se meus leitores também ainda estão vivos hehehe. Té. Divirtam-se.

/* Micox CSS mini-lib 1.0 - 22/02/2008 - elmicox.blogspot.com
   A leitura dos comentários é obrigatória para o entendimento */

/* padronizando propriedades pros navegadores ficarem parecidos e corrigindo alguns bugs */
* { margin: 0; padding: 0; outline: 0;
 font-weight: inherit; font-style: inherit;
 font-size: 100%; font-family: inherit;
 line-height: 1.1em; vertical-align: baseline }
p { margin-bottom: 0.5em; }
hr { clear: both; float: none; width: 100%; }
* html body hr { margin: -7px; display: block;}  /* os hr tem uma altura extra misteriosa no IE */
a, img { border: none; }
img { vertical-align: middle;}
fieldset { display: block; border: 2px ridge #FFF; padding: 10px; } /* fieldset não é block em todos */
ul, ol { margin-left: 1.5em; list-style-position: outside; }
li { vertical-align: top; line-height: 1.2em;}  /* IE: posição vertical do marcador no IE  e espaço extra fantasma em lis*/
li a { zoom: 1; line-height: 1.2em; }  /* complemento do anterior */
input[type=hidden]{ display: none !important; visibility: hidden !important;} /* input hidden no FF */
button { border: 1px outset #AAA; }
legend { margin-bottom: 1.4em; } /* Fixes incorrect styling of legend in IE6 fieldsets. */
label { display: block;}
table { border-collapse: separate; border-spacing: 0; }
caption, th, thead, tfoot { text-align: center; font-weight: bold; }
blockquote:before, blockquote:after,q:before, q:after { content: “”; }
blockquote, q { quotes: "" ""; }
pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* FF 1999 */
 white-space: -pre-wrap; /* OP 4-6 */ white-space: -o-pre-wrap; /* OP 7 */  word-wrap: break-word; /* IE 5.5+ */
}
h1 { font-size: 250%; font-weight: normal;}
h2 { font-size: 200%; font-weight: normal;}
h3 { font-size: 150%; font-weight: normal;}
h4 { font-size: 120%; font-weight: normal;}
h5 { font-size: 110%; font-weight: normal;}
h6 { font-size: 100%; font-weight: bold;}

/* centralizando o container (que tem todo o conteúdo da página) */
#container { margin: auto; vertical-align: middle; }

/* classes úteis de posicionamento.
   Ex.: Tenho uma lista de caixas separadas por margin. Pra última caixa se alinhar com a borda,
   é bom colocar a classe last nela */
.top { margin-top: 0; vertical-align: top; vertical-align: top;}
.bottom { margin-bottom: 0; vertical-align: baseline;  vertical-align: bottom;}
.left { margin-left: 0; float: left; }
.right { margin-right: 0; float: right; }
.center { margin: auto; vertical-align: middle; }
.first { margin-top: 0; margin-left: 0; vertical-align: top;}
.last { margin-bottom: 0; margin-right: 0; vertical-align: bottom;}

/* classes úteis na formatação */
.screenreader { display: none; }
.ak { text-decoration: underline; /* access keys */ }
.u { text-decoration: underline; /* textos underline */}
.notice { background-color: #F9FF9A; /*yellow*/}
.error { background-color: #FF8E8E; /*red*/}
.highlight  { background:#ff0; }

/* para não precisar do famoso div wrapper [http://www.positioniseverything.net/easyclearing.html] */
.clear { display: inline-block; }
.clear:after, .container:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.clear { display: block; zoom: 1; }

/* fazendo colunas com alturas iguais [http://www.positioniseverything.net/articles/onetruelayout/equalheight] */
.paifullcols { overflow: hidden; width: 99.8%; display: inline-block; }
.paifullcols:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.paifullcols { display: block; zoom: 1; }
.paifullcols .fullcol { float: left; padding-bottom: 1000em; margin-bottom: -999.5em; width: auto }

/* classes para debug: borderchilds, borderdivs e bordercols */
.borderchilds * { border: 1px dashed #CCC;}
.borderchilds span, .borderchilds a, .borderchilds b, .borderchilds strong, .borderchilds i, .borderchilds em,
.borderchilds legend, .borderchilds br { border: none;}
.borderchilds p { border-color: blue; }
.borderchilds div { border-color: red; }
.borderchilds table { border-color: green; }
.borderchilds ul, .borderchilds ol { border-color: cyan; }
.borderchilds .fullcol { border: 1px solid black;}
.borderdivs div, .bordercols .fullcol, .bordercols .paifullcols { border: 1px dashed red;}

/*
  Menus drop-down horizontal-vertical (hv) e vertical-vertical (vv) até 4 níveis
  by Micox - elmicox.blogspot.com - Ver. 2.0 - 20/02/08 - Creative Commons License
*/
.menu-hv, .menu-vv { position: relative; margin: 0; padding: 0; display: block; zoom: 1;}
 .menu-hv * ,    .menu-vv * { margin: 0; padding: 0 ; list-style: none}
 .menu-hv li ,   .menu-vv li { position: relative; line-height: 1.2em; vertical-align: top }
 .menu-hv a ,    .menu-vv a { display: block; zoom: 1; line-height: 1.2em }
 .menu-hv li ul, .menu-vv li ul { position: absolute; visibility: hidden  }
 .menu-hv li:hover ul,  .menu-vv li:hover ul,
 .menu-hv li.hover ul,  .menu-vv li.hover ul { visibility: visible }
 .menu-hv li:hover ul ul,  .menu-vv li:hover ul ul,
 .menu-hv li.hover ul ul,  .menu-vv li.hover ul ul { visibility: hidden }
 .menu-hv li li:hover ul,  .menu-vv li li:hover ul,
 .menu-hv li li.hover ul,  .menu-vv li li.hover ul { visibility: visible }
 .menu-hv li li:hover ul ul,  .menu-vv li li:hover ul ul,
 .menu-hv li li.hover ul ul,  .menu-vv li li.hover ul ul { visibility: hidden }
 .menu-hv li li li:hover ul,  .menu-vv li li li:hover ul,
 .menu-hv li li li.hover ul,  .menu-vv li li li.hover ul { visibility: visible }
 /* características horizontal-vertical */
 .menu-hv:after, .menu-hv.after { content: "."; line-height: 0px; clear: both; display: block; visibility: hidden}
 .menu-hv li { float: left; }
 .menu-hv li ul li { float: none; }
 .menu-hv li ul li ul { position: absolute; left: 100%; top: 0; }
 /* características vertical-vertical */
 .menu-vv { float: left; }
 .menu-vv li ul { left: 100%; top: 0; }
 /* ****************************************
   ALTERE ABAIXO. defina a largura dos itens do seu menu abaixo
   ou apague as linhas se for definir em outro lugar */
 .menu-hv li { width: 100px; background-color: cyan }
 .menu-vv li { width: 100px; background-color: cyan }
 .menu-hv li a:hover { background-color: gray }
 .menu-vv li a:hover { background-color: gray }

/* Micox Pseudo-class-css2 to IE (MXPC). Activate .hover and .first-child in IE 6 */
* html * { color: expression( (function(who){ if(!who.MXPC && who.nodeName != 'A'){
 who.MXPC = '1';
 who.onmouseenter=function(){ who.className += ' hover'};
 who.onmouseleave=function(){ who.className = who.className.replace(' hover','')};
 (who==who.parentNode.firstChild) ? who.className += ' first-child' : '' ;
} } )(this) , 'auto') }

Ah, meu novo passatempo é um site de concursos www.resultadoconcursos.net . Quem curte concursos passa por lá.

5 convites ‘di grátis’ para o EWD-RJ sorteados no Webly

Abril 30th, 2008 by micox

Post rápido promocional do Webly macacada. Quem for do Rio de Janeiro, aproveite que é ‘di grátis’:

Promoção relâmpago do Webly para o 13º EWD-RJ, Famoso Encontro de Webdesign promovido pela Arteccom da Revista Webdesign.
A Arteccom deu 5 convites para o EWD - Rio de Janeiro de presente para os membros do Webly

Iremos fazer uma espécie de “sorteio” entre os membros com MAIS de 5 postagens (6 para cima), incluindo usuários normais e usuários “amigo webly”, moderadores e coordenadores.

Mais aqui: 13° Ewd- Rio De Janeiro, Promoção exclusiva para pessoas do Rio de Janeiro!

Zumbis

Abril 15th, 2008 by micox

Chega um pouco de falar de javascript, css, programação, concordam?
Hoje o mico vai papear e falar sobre zumbis. “What?!?” - Isso mesmo, zumbis comedores de carne humana.

Em breve, vocês vão ver seu leitor de feeds lotar com notícias sobre o tal filme de zumbis rodado em Brasília.
O motivo é uma promoção do atoouefeito dando camiseta e sangue pra quem ajudar a divulgar o filme.
Djo não estou ajudando só por causa disso não, pois nunca ganhei promoção nenhuma, nem em bingo.
Tô ajudando a divulgar, pois sou fã dessas paradas comédia de zumbis e acho que um filme brazuca deve ser mais comédia ainda heheaheh. Ainda mais sendo um filme independente, com pouca verba e talz. Vamo ver o que sai, gosto muito da mistura de terror e comédia.

Imagem zumbis em brasilia

Sou leitor do Ato Ou Efeito e acompanhei estes dias a coluna que fala sobre zumbis. Lá descobri que, há um tempo atrás, saiu uma HQ misturando zumbis e o universo Marvel (x-men, homem aranha, pá e talz).
O nome da série é Marvel Zombies e, este macaco, que havia passado 7 anos sem ler uma mísera HQ, teve vontade de achar as supra-citadas revistas para ler.

Infelizmente não achei para comprar (a séria é de 2006/2007 parece) então tive que “cavucar” na net e ir baixando as partes separadas. Tá dando trabalho pois a saga completa é dividida em várias revistas, são links antigos, quebrados, alguns sem tradução, etc. Mas as partes que eu já baixei tão valendo a pena, muito bom a parada.

Image Hosted by ImageShack.us

Nas aulas de redação do meu ensino médio, aprendi sobre uma parada chamada “verossimilhança” que diz que, apesar da estória (com ‘e’ mesmo neste caso) ter a liberdade de ser fantasiosa, ela tem que manter um certo grau de possibilidade, sem ambiguidades, sem loucuras em excesso (a não ser que seja um livro do Mário de Andrade hehahe), enfim, não sei como explicar. “E daí mico?”.

E daí que sempre tive algumas dúvidas sobre essas bizarrices de zumbis. Acompanhem meu raciocínio nobres colegas, caso ainda não estejam dormindo:

1) Se o zumbi não comer por muito tempo, o que sustenta a energia do corpo dele? Ela deveria acabar e o zumbi cair no chão, certo?

2) Como a fome dos zumbis é grande, ao se alimentar de pessoas, devem comer tudo e não sobrar nada né? Como ainda sobra tantas pessoas com corpo inteiro pra virar novos zumbis? Eles não deveriam se multiplicar tão rápido ué.

“É um filme bizarro mané, ele não tem que se explicar, ele tem apenas que divertir. O maluco tá vendo um filme onde mortos andam e quer verossimilhança? Doido” - Vocês pensando…

Mudando de assunto, você pode não saber, mas o Micox já foi um exímio diretor de filmes trash quando era mais jovem (1998/1999) com 3 filmes de mais de 15 mins na bagagem huaheuae. Tiroteios, explosões, cenas em velocidade, pá e talz.
Um deles passou até em um festival de filmes trash aqui em Goiânia em que o ilustríssimo Zé do Caixão estava presente. O povo morreu de rir com o filme, caiam no chão heaehe.
Este que passou está em formato digital, mas não vou publicar na net não porque (1) eu não sei mais onde está o dvd, (2) Os “atores” colegas meus me ameaçaram de morte se eu publicar isto. Hoje são todos senhores de respeito, casados, pá e talz. heaheh

Vocês devem estar pensando: “Puts, esse micox é deve ser um power nerd espinhento de óculos fundo de garrafa que não pega mulé mesmo viu: javascript, programação, filmes trash, HQs. Só falta dizer que gosta de Jornada nas Estrelas”

Bom, tirando a parte do “espinhento de óculos fundo de garrafa que não pega mulé” o resto é verdade mesmo (só que não gosto de Jornada nas Estrelas).
Só não posto uma foto para a mujerada ver meu poder galanteador senão os servidores não vão aguentar de tantos acessos femininos.

“Puts, desliga o mico que ele tá doido hoje”.
OFF.

Homer em CSS puro - sem imagens

Abril 11th, 2008 by micox

Pois é…

Tem que tá com muuuuito tempo sobrando, ter muita criatividade e domínio do CSS. E o pior é que não ficou bizarro. O negócio ficou bom, muito bom.

Autor: Román Cortés

Descoberto via: Dkcell

o
o
o
o
(
O
O
O
\
L
(
O
O
O
O
O
\
L
(
O
|
|
\
\
|
|
\
\
\
\
(
(
8
o
o
o
(
(
8
o
o
o
o
)
)
b
o
O
o
o
o
o
o
o
)
b
o
O
o
o
o
o
o
o
o
o
o
/
/
/
_
_
_
C
C
O
(
-