Posts avec le tag "javascript"

Javascript

Ajouté le 18.01.2008 - 00:00 dans  •  Commentaires (2)
Tags: javascript jquery

Je viens de jouer avec un peut de JS. Mais cette fois, je n'ai RIEN codé : j'ai utilisé une lib opensource et tout, nommée jquery.
Elle est juste géniale!! En 4 minutes j'ai pu faire un truc me permettant de faire apparaître le formulaire pour ajouter des commentaires avec un effet de transition marrant et tout.....
Franchement, jquery... chapeau !!!!

Lire plus

JQuery - Divers codes

Ajouté le 24.08.2009 - 21:39 dans  •  Commentaires (0)
Tags: javascript jquery

Lors de mon développement de galerie avec Pylons, j'ai décidé de planter un peu de javascripts pour rendre la navigation plus agréable et avec 1-2 effets cools.

Tout est basé sur JQuery, une librairie très pratique, et légère.

Voici les bouts de codes utiles, en vrac.

Scrolling des thumbs


Pour lui, j'ai ajouté quelques plugins à JQuery:

ScrollTo
MouseWheel


Ensuite, le code qui va bien:

//borrowed from jQuery easing plugin
//[url]http://gsgd.co.uk/sandbox/jquery.easing.php[/url]
$.easing.elasout = function(x, t, b, c, d) {
  var s=1.70158;var p=0;var a=c;
  if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
  if (a < Math.abs(c)) { a=c; var s=p/4; }
  else var s = p/(2*Math.PI) * Math.asin (c/a);
  return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
};
$(document).ready(function() {
  $('#mini').css('overflow','hidden');
  $('#mini').mousewheel(function(event, delta) {
    var mv;
    if (delta > 0) {
      mv = '-='+offset+'px';
    } else {
      mv = '+='+offset+'px';
    }
    $('#mini').scrollTo(mv,500, {easing:'elasout'});
    return false;
  });
  $('#bottom_lnk').click(function() {
    $('#mini').scrollTo('+='+offset+'px',1000, {easing:'elasout'});
  });
  $('#top_lnk').click(function() {
    $('#mini').scrollTo('-='+offset+'px', 1000, {easing:'elasout'});
  });
});


En gros, #mini correspond à la div contenant les miniatures; via javascript, je mets l'overflow à "hidden", de manière à supprimer les barres de scrolling.
J'ajoute 3 "listeners": un sur la roulette de la souri dans #mini, et deux sur des clics sur des éléments de la page (en l'occurence, deux divs).

Affichage de l'image "moyenne"


Là, c'est plus simple:

$(document).ready(function() {
  $('.mini_lnk').click(function() {
    path = String(this);
    img = basename(path.replace('^http:\/',''));
    $('#big_img_lnk').attr( {href: '/imager/Munich 20.09.2008/'+img+'/full', title: 'Open '+img+' in 1024x px' } );
    $.get('/getExif/Munich 20.09.2008/'+img,{}, function(data) { $('#exifs').html(data);});
    // if we rotated the previous image, it's now a "canvas" element.. have to remove canvas, ans put "img" instead
    $('#big_img_lnk').html('<img id="big_img" src="/imager/Munich 20.09.2008/'+img+'/750" alt="'+img+'" />');
    $('#quickurl').val('[url]http://gallery.internux.ch/gallery/Munich+20.09.2008/[/url]'+img);

    return false;
  });
}

En gros, je catch l'event "click" des miniatures, et je réécris à la volée l'URL de l'image moyenne; du fait que j'ai ajouté la possibilité de faire des rotations d'image, il m'a fallu faire un petit hack pour retomber sur mes pattes.
Je profite aussi pour aller chercher les informations exifs de l'image, et afficher son URL direct dans le champs prévu à cet effet.

Rien de bien compliqué en soi. Voire que du très simple, mais j'ai pas mal cherché, surtout pour l'histoire du scroll. Il y a une floppée de trucs déjà prêts, employant JQuery, mais ils ne me plaisaient pas.
Donc j'apporte ma Nième contribution ;)

Vous pouvez sans autre aller voir le code javascript in situ.

Happy coding (oupa, le JS, c'est un peu chiant quand même ;) )

Lire plus

Premiers pas OpenLayers & OpenStreetMap

Ajouté le 09.05.2010 - 21:24 dans  •  Commentaires (0)
Tags: openlayers osm javascript

Dans le cadre d'un petit projet, je devais mettre en place une carte statique, et permettre à des clients de modifier cette image en ligne. Le but était qu'ils mettent des traits dessus signifiant à peu près la distance parcourue par des personnes.
Basique, mais surtout très moche. Je me suis dit que je pourrais proposer mieux.

Après avoir posé 2-3 questions, je suis arrivé à une solution simple et pratique :
utiliser les cartes d'OSM, les afficher avec OpenLayers, et tracer dessus un cercles représentant ladite distance.

Résultat ? bin un truc dynamique, qui marche bien, assez rapide, et surtout ne demandant aucune maintenance.

Le petit bout de code qui me permet de faire cela :
<script type="text/javascript" src="[url]http://openlayers.org/api/OpenLayers.js[/url]"></script>
    <script type="text/javascript">
      var map, layer;
      var proj_4326 = new OpenLayers.Projection("EPSG:4326");
      var proj_900913 = new OpenLayers.Projection("EPSG:900913");
      var steps = 90000;
      var distance = steps*0.75;

      function init() {
        origin = new OpenLayers.Geometry.Point(6.60, 46.56);
        origin.transform(proj_4326, proj_900913);

        map = new OpenLayers.Map('map', {displayProjection: proj_4326, controls:[new OpenLayers.Control.Navigation] } );
        //map = new OpenLayers.Map('map', {displayProjection: proj_4326, controls:[] } );
        layer = new OpenLayers.Layer.OSM();
        map.addLayer(layer);
        //map.setCenter(new OpenLayers.LonLat(7.59, 46.66).transform(proj_4326, proj_900913), 7);
        map.setCenter(new OpenLayers.LonLat(6.60, 46.56).transform(proj_4326, proj_900913), 7);

        createCircle();


        map.events.on({zoomend: createCircle });
      }

      function createCircle() {
        map.setCenter(new OpenLayers.LonLat(6.60, 46.56).transform(proj_4326, proj_900913));
        var radius = distance/map.resolution;
        var myStyles = new OpenLayers.StyleMap({
          "default": new OpenLayers.Style({
            pointRadius: radius,
            fillColor: "#ffcc66",
            fillOpacity: 0.3,
            strokeColor: "#ff9933",
            strokeWidth: 2,
            graphicZIndex: 1
          })
        });

        var circus = new OpenLayers.Layer.Vector("Points", {
            styleMap: myStyles
        });

        circus.addFeatures(new OpenLayers.Feature.Vector(origin));
        map.addLayer(circus);
      }
    </script>


On obtient un bout de carte de chez OSM, centré sur Lausanne, avec un cercle représentant env. 67.5km. Pour le moment, c'est pas encore 100% dynamique, j'attends la validation... Mais sur le principe, c'est vraiment easy.

Bon, certes, j'ai pas fait ce truc juste du premier coup, et j'avais des collègues connaissant le système autour de moi (ils rigolaient un peu d'ailleurs) pour me filer un coup de main :).

Pour le moment, le démonstrateur statique est ici : http://demo.itnux.ch/map-example.html
Y a plus qu'à :D

++

Tengu

Lire plus