Autor Zpráva
solta
Profil
ahoj

mam skrip který má provádět akci při stisknutí levého tlačítka a má se ukoncit pri jeho pustění
vymyslel jsem to následovně ale nevím jak nastavit proměnou mouse_down na false při pustěni toho tlačitka

$('#status').mousedown(function(e){
  var mouse_down=true;
  if(e.which==1){
    while(mouse_down){
      .
      .
      .
      //mouseup mouse_down=false
    }
  }
});
Darker
Profil
solta:
vymyslel jsem to následovně
To nemůžeš dát do while - zasekne to prohlížeč.

To co chceš se řeší tak, že si při zmáčknutí myši uložíš do paměti, že je zmáčknutá a pří puštění nebo odjetí myši si zas uložíš je je puštěná. Při zmáčknutí zároveň aktivuješ interval funkcí setInterval (nebo uděláš rekurzivní timeout) který se ukončí ve chvíli, kdy nějaká proměnná mouseIsDown bude false.
solta
Profil
Darker: dekuji potrebuji v te funkci ale neustale zjistovat pozici mysi jak to udelam udalost tam predam jen jednou jak tedy zjistim pozici kurzoru bez udalosti
Darker
Profil
solta:
jak tedy zjistim pozici kurzoru bez udalosti
Nezjistíš. Mám pocit že chceš udělat nějakou funkci na tažení myší (mohls to říct hned). To se pak dělá tak, že máš místo intervalu který jsem zmiňoval event onmousemove a ten něco udělá, pokud je myš zmáčknutá.
solta
Profil
Darker:
vlastne se snazim vytvorit vyrtualni joystick ale to jsem si uvedomil az ted kliknes v danem prostoru a podle to jak s mysi hybes tak se hybe objekt
solta
Profil
Darker:
hekuji za spolupraci vyresil jsem to takhle

    var shift_interval;
    var dx,dy;
    
    $('#rosette').mousedown(function(e){
        if(e.which==1){
            shift_interval=setInterval(shift,40);
        }
    })
    
     $('#rosette').mouseup(function(){
        clearInterval(shift_interval);
    })

     $('#rosette').mouseleave(function(){
        clearInterval(shift_interval);
    })

    $('#rosette').mousemove(function(e){
        //vypocet prirustku
        var x=$(this).width()/2;
        var y=$(this).height()/2;
        var offset = $(this).offset();

        dx=((offset.left+x)-e.pageX)*2
        dy=((offset.top+y)-e.pageY)*2
    })
    
    function shift(){
        //posouvani 
    }



prosím moderatory aby změnili název diskuse třeba na jquery virtualní joystick ať to dává větší smysl
Darker
Profil
Proč neposouváš rovnou v rámci eventu mousemove? Nepotřeboval bys pak shift...
_es
Profil
solta:
Tipujem, že sa aj môže nejako stať, že časovač setInterval nebude zrušený.
solta
Profil
no zkusi jsem s tim ruzne blbosti a mas pravdu mas pro me tedy nejakou radu
Moderátor Chamurappi: Tvůj projev je špatně srozumitelný, piš prosím s diakritikou a interpunkcí.
Suta
Profil
solta:
Pouze připomínka k používání jQuery. Nauč se využívat uložení odkazu na jQuery objekt do lokální proměnné namísto jeho neustálého vytváření. Proměnné, které značí objekt vytvořený knihovou jQuery pojmenovávej (nepovinná, avšak doporučená konvence) se znakem $ na začátku.

Místo:
$('#rosette').mousedown(function(e){ ...
$('#rosette').mouseup(function(e){
$('#rosette').mouseleave(function(e){
$('#rosette').mousemove(function(e){

Používej:
$rosette = $('#rosette');
$rosette.mousedown(function(e){ ...
$rosette.mouseup(function(e){
$rosette.mouseleave(function(e){
$rosette.mousemove(function(e){

nebo
$('#rosette')
    .on("mousedown",function(e){ ... })
    .on("mouseup",function(e){ ... })
    .on("mouseleave",function(e){ ... })
    .on("mousemove",function(e){ ... });

A místo:
var x=$(this).width()/2;
var y=$(this).height()/2;
var offset = $(this).offset();

Používej:
var $this = $(this),
    x=$this.width()/2,
    y=$this.height()/2,
    offset=$this.offset();
Chamurappi
Profil
Reaguji na Sutu:
(nepovinná, avšak doporučená konvence) se znakem $ na začátku
Docela praštěná konvence. K čemu to je? V JavaScriptu se proměnné podle datových typů nepojmenovávají, to je spíš zvyklost z Basicu. Podle ECMAScriptu 3 jsou proměnné začínající dolarem vyhrazené pro strojově generovaný kód.
Na tvé ukázce je vidět, že dolar na začátku dokáže zmást automatické zvýrazňovače kódu, protože pak je JS skoro k nerozeznání od PHP.

Moderátor Chamurappi: Další debata o konvenci s dolarem vytržena do Je dobrý nápad prefixovat proměnné s jQuery objekty dolarem?
solta
Profil
Suta:
Děkuji za připomínku jistě ji zvážím a pokusím se ji implementovat ale ted bych potřeboval vyrešit tu ružici
Suta
Profil
solta:
Nevím přesně, s čím aktuálně zápasíš, ale tuším, že potřebuješ něco takového:

var dx,
    dy,
    startClientX,
    startClientY;
    
$('#rosette').mousedown(function(e){

    if(e.which==1){

        // při kliknutí v požadovaném elementu uložíš aktuální pozici myši
        startClientX = e.clientX;
        startClientY = e.clientY;

        // na dokument navážeš událost mousemove
        $(document)
            .on("mousemove.rosette",function(e) {

                var actualClientX = e.clientX,
                    actualClientY = e.clientY;

                // zde máš rozdíl mezi aktuální pozicí myší a pozicí myši v době mousedown
                var shiftX = startClientX - actualClientX,
                    shiftY = startClientY - actualClientY;

                // zde můžeš provést operaci s daným rozdílem
            })
            .on("mouseup.rosette",function(){

                // při mouseup zrušíš událost mousemove (i mouseup)
                $(document)
                    .off("mousemove.rosette")
                    .off("mouseup.rosette");
            });
    }
})

Poslední update kódu: 15:42
Chamurappi
Profil
Reaguji na soltu:
ale ted bych potřeboval vyrešit tu ružici
Já dělám přetahování jinak.
solta
Profil
Chamurappi:
ja se pokouším vytvorit něco podobněho jako je na mapy.cz ta navigační ružice což je něco jiného než nabízíš nebo to špatně chápu
Suta
Profil
solta:
ja se pokouším vytvorit něco podobněho jako je na mapy.cz ta navigační ružice
To je pak těžko radit, když nevyjádříš přesně, co potřebuješ.
solta
Profil
Suta:
Virtuální joystick je myslím dost výstižné
Suta
Profil
solta:
Pak jsem ti výše ve svém kódu nastínil výstižný postup, jehož modifikací si svoji růžici můžeš naprogramovat. Ostatně je to stejný postup, jaký ti Chamurappi popsal teoreticky.
solta
Profil
Suta:
promin tvůj příspěvek jsem tam úplně přehlédnul podivam se na to

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: