Ekranı hatırlamak için fareyle bir div taşıyabilmeli ve div'in yeni konumunu saklayabilmem gerekir. Nasıl yapabilirim?JQuery kullanarak fareyle div nasıl taşınır?
cevap
jQuery UI ürününe ve sürüklenebilir etkileşime göz atmanızı öneririm. Sonra durdurma durumunda sizin gerekli davranışı koymak,
$("#draggable").draggable();
Ve: Temelde (o id = "sürüklenebilir" vardır varsayarak) sürüklenebilir div kod eklemek isteyeceksiniz. Daha spesifik olarak, bunu yapmak istiyorum:
$('#draggable').draggable({
stop: function(event, ui) { ... }
});
veritabanı depolama gelince, yukarıdaki işlevinde bir AJAX çağrısını kullanabilirsiniz veya bazı form gönderebilir veya başka şekilde, sayfa içi saklayın olabilir eylem, sunucuya aktarılan ve diğer verilerle satır içi olarak saklanan konum bilgisiyle sonuçlanır. Bir AJAX çağrısına dikkat etmeliyim, çünkü her bir tarayıcıda her sürükleme ile db'nizi konum verileriyle bombalayabilirsiniz. Uygulamanıza bağlı olarak değişir ...
Burada jQuery UI kullanarak değil sadece jQuery kullanarak divleri sürüklemenize izin vermek için yazdığım biraz jQuery işlevi.
/* PlugTrade.com - jQuery draggit Function */
/* Drag A Div with jQuery */
jQuery.fn.draggit = function (el) {
var thisdiv = this;
var thistarget = $(el);
var relX;
var relY;
var targetw = thistarget.width();
var targeth = thistarget.height();
var docw;
var doch;
thistarget.css('position','absolute');
thisdiv.bind('mousedown', function(e){
var pos = $(el).offset();
var srcX = pos.left;
var srcY = pos.top;
docw = $('body').width();
doch = $('body').height();
relX = e.pageX - srcX;
relY = e.pageY - srcY;
ismousedown = true;
});
$(document).bind('mousemove',function(e){
if(ismousedown)
{
targetw = thistarget.width();
targeth = thistarget.height();
var maxX = docw - targetw - 10;
var maxY = doch - targeth - 10;
var mouseX = e.pageX;
var mouseY = e.pageY;
var diffX = mouseX - relX;
var diffY = mouseY - relY;
// check if we are beyond document bounds ...
if(diffX < 0) diffX = 0;
if(diffY < 0) diffY = 0;
if(diffX > maxX) diffX = maxX;
if(diffY > maxY) diffY = maxY;
$(el).css('top', (diffY)+'px');
$(el).css('left', (diffX)+'px');
}
});
$(window).bind('mouseup', function(e){
ismousedown = false;
});
return this;
} // end jQuery draggit function //
jQuery işlevi, div'in sınırların dışına çıkmasını da engeller. Temel olarak, onu sürükleme aktivatörü olarak hedeflediğiniz bir div'a eklersiniz (örneğin başlık çubuğu). bunu çağırma bu kadar basittir:
$("#titleBar").draggit("#whatToDrag");
Yani #titleBar senin başlık çubuğu div id olacağını ve #whatToDrag sürüklemeye istediğini kimliği olacaktır. Dağınık kod için özür dilerim, bunu hackledim ve jQuery UI'ye bir alternatif sunacağını düşündüm, yine de uygulamayı kolaylaştıracağım.
doch, $ (window) yerine $ (window) .height() 'ı kullanmalıdır, çünkü beden sadece onu dolduran içerik kadar uzundur, belki de tüm pencere değil. Ya da eğer bir şekilde pencerenin penceresinden daha yüksekse gövdeyi kullanın, eğer bir şekilde sürükleyiciyi pencerenin görüntüsünün altına koymak isterseniz. Ama yine de harika! – Alendri
Tam olarak aradığım şey. @Alendri'nin söylediklerine ek olarak, 'thistarget.width()' ve 'thistarget.height()', 'externalWidth()' ve 'outerHeight()' yerine, hedef üzerindeki dolguyu telafi etmek için kullanmalıdır. – Jeff
Çok fazla nesne varsa, mousemove pahalı olabilir. Çözmenin bir adımı, işleyiciyi mousedown'a bağlamak ve fareyle üzerine yazmaktır. Bu örnek, pek çok nesne ile yazılmış ve test edilmemiştir; Özellikle, geçerli açımlama, daha önce bağlanmış olan her şeyi (lambda ifadesinin isimlendirilmesiyle ve bu ismin çözülmeyerek çözülmesiyle çözülebilir) çözer.
jQuery.fn.dragdrop = function (el) {
this.bind('mousedown', function (e) {
var relX = e.pageX - $(el).offset().left;
var relY = e.pageY - $(el).offset().top;
var maxX = $('body').width() - $(el).width() - 10;
var maxY = $('body').height() - $(el).height() - 10;
$(document).bind('mousemove', function (e) {
var diffX = Math.min(maxX, Math.max(0, e.pageX - relX));
var diffY = Math.min(maxY, Math.max(0, e.pageY - relY));
$(el).css('left', diffX + 'px').css('top', diffY + 'px');
});
});
$(window).bind('mouseup', function (e) {
$(document).unbind('mousemove');
});
return this;
};
$(document).ready(function() {
return $('#obj').dragdrop('#obj');
});
Veya Parenscript içinde
: Eğer tarayıcılar testler ve tüm bu barbut ile pisliği istemiyorum eğer(setf (chain j-query fn dragdrop)
(lambda (el)
(chain this
(bind :mousedown
(lambda (e)
(let ((rel-x (- (chain e page-x) (chain ($ el) (offset) left)))
(rel-y (- (chain e page-y) (chain ($ el) (offset) top)))
(max-x (- (chain ($ :body) (width)) (chain ($ el) (width)) 10))
(max-y (- (chain ($ :body) (height)) (chain ($ el) (height)) 10)))
(chain ($ document)
(bind :mousemove
(lambda (e)
(let ((diff-x (min max-x (max 0 (- (chain e page-x) rel-x))))
(diff-y (min max-y (max 0 (- (chain e page-y) rel-y)))))
(chain ($ el) (css :left (+ diff-x :px)) (css :top (+ diff-y :px)))))))))))
(chain ($ window)
(bind :mouseup
(lambda (e)
(chain ($ document)
(unbind :mousemove)))))
this))
- 1. jQuery kullanarak bir div döndürme
- 2. DOM'deki bir öğe nasıl taşınır?
- 3. HTML öğesi nasıl taşınır
- 4. jquery, div nasıl bilinir?
- 5. JQuery'de tablo satırı nasıl taşınır?
- 6. jQuery değişkenleri kullanarak div belleği göster/göster
- 7. Div pozisyonunu div (jQuery) ile takip edin -
- 8. JQuery kullanarak Fancybox'ta gizli div göster JQuery çalışmıyor
- 9. nasıl bir div öğesi (jQuery)
- 10. JQuery kullanarak fare tıklatmasının yanındaki bir div nasıl konumlandırılır?
- 11. JQuery kullanarak bir div içinde metin bağlantısı nasıl eklenir?
- 12. jQuery DIV öğesi için tıklatma() ve dblcick() nasıl ayırt edilir?
- 13. Bir öğenin jQuery'deki Çapraz Hareketi nasıl taşınır?
- 14. Div jquery sayısının sayısı
- 15. Jquery div etiketine kaydır
- 16. Blur Nasıl Div CSS kullanarak
- 17. QSplitter nasıl taşınır?
- 18. Raphael seti nasıl taşınır?
- 19. Boru hattı nasıl taşınır?
- 20. JavaScript kullanarak div yüksekliği nasıl hesaplanır?
- 21. jquery UI sortable - div sıralama
- 22. jquery div show'da gösterme
- 23. jQuery - dış div
- 24. jQuery Çocuk Div
- 25. jQuery geçiş div
- 26. Kullanım jQuery .filter() div
- 27. jQuery gizle div
- 28. jquery load(), div kullanırken
- 29. , div içinde jquery .html ('');
- 30. jQuery UI'deki liste öğelerini nasıl yalnızca jQuery içinde değil, fareyle birlikte hareket ettirebilirim?
Evet, bu en iyi yoldur. +1 benden;) –