2010-03-11 17 views

cevap

9

İlk yük jQuery UI:

<link type="text/css" href="css/themename/jquery-ui-1.7.1.custom.css" rel="Stylesheet" /> 
<script type="text/javascript" src="js/jquery-1.3.2.min.js"></script> 
<script type="text/javascript" src="js/jquery-ui-1.7.1.custom.min.js"></script> 

Ardından kullanmak jQuery UI draggable method: Sen jquery UI olmadan, sadece jquery ile yapabileceğiniz

<script type="text/javascript"> 
$(function() { 
    $("#b").draggable(); 
}); 
</script> 
+0

jQueryUI onun arka uç düzgün yıllarda güncellenmiş ve şimdi sık sık yan diğer uygulama geliştirme boyunca temiz bir şekilde çalışan sorunları vardır olmamıştır. Bunun nedeni jqueryUI'nin en yeni sürümünün jquery v1.7.x olmasını gerektirmesidir. Burada jQuery'nin kendisi bu yorumun olduğu zamandan itibaren v3.2.1 üzerindedir. – Nosajimiki

34

:

function handle_mousedown(e){ 
    window.my_dragging = {}; 
    my_dragging.pageX0 = e.pageX; 
    my_dragging.pageY0 = e.pageY; 
    my_dragging.elem = this; 
    my_dragging.offset0 = $(this).offset(); 
    function handle_dragging(e){ 
     var left = my_dragging.offset0.left + (e.pageX - my_dragging.pageX0); 
     var top = my_dragging.offset0.top + (e.pageY - my_dragging.pageY0); 
     $(my_dragging.elem) 
     .offset({top: top, left: left}); 
    } 
    function handle_mouseup(e){ 
     $('body') 
     .off('mousemove', handle_dragging) 
     .off('mouseup', handle_mouseup); 
    } 
    $('body') 
    .on('mouseup', handle_mouseup) 
    .on('mousemove', handle_dragging); 
} 
$('#b').mousedown(handle_mousedown); 
+3

Bu, ek bir eklenti gerektirmediğinden kabul edilen yanıt olmalıdır. – BFWebAdmin

+0

@BFWebAdmin mutlaka soru açıkça/özellikle jquery için sorar çünkü .. – MJB

+1

@MJB - Ek eklenti, ben ayrı olarak yüklenmesi gereken jQuery UI demek. – BFWebAdmin

11

Sadece Bu kadar tüm jQuery UI "sürükleyerek" yerine çok taşınabilir onun pişmiş.

Aşağıda sürüklerken metin seçmez, bu aslında burada diğer kodun aksine üretimde çalışır.

Eğer

$.fn.draggable = function(){ 
    var $this = this, 
    ns = 'draggable_'+(Math.random()+'').replace('.',''), 
    mm = 'mousemove.'+ns, 
    mu = 'mouseup.'+ns, 
    $w = $(window), 
    isFixed = ($this.css('position') === 'fixed'), 
    adjX = 0, adjY = 0; 

    $this.mousedown(function(ev){ 
     var pos = $this.offset(); 
     if (isFixed) { 
      adjX = $w.scrollLeft(); adjY = $w.scrollTop(); 
     } 
     var ox = (ev.pageX - pos.left), oy = (ev.pageY - pos.top); 
     $this.data(ns,{ x : ox, y: oy }); 
     $w.on(mm, function(ev){ 
      ev.preventDefault(); 
      ev.stopPropagation(); 
      if (isFixed) { 
       adjX = $w.scrollLeft(); adjY = $w.scrollTop(); 
      } 
      var offset = $this.data(ns); 
      $this.css({left: ev.pageX - adjX - offset.x, top: ev.pageY - adjY - offset.y}); 
     }); 
     $w.on(mu, function(){ 
      $w.off(mm + ' ' + mu).removeData(ns); 
     }); 
    }); 

    return this; 
}; 

"dock" böylece bu da oldukça güzel sabit konumlandırılmış elemanları ile çalışır Ama bu mutlak varsayar veya sabit konumlandırma zaten elemana uygulanır.

şöyle kullanın:

$('#something').draggable(); 
+0

Bu FYI kullanılmasını önermiyorum. Sürüklenebilir durumda MDN'ye bakın ve yerel tarayıcı yolunu kullanın. –

+0

benim için iyi çalışıyor! – foreyez

İlgili konular