2011-01-12 18 views
10

Tôi đang chuyển đổi trang web cho khách hàng từ bộ khung thành div. Một tính năng mà khách hàng có là một thanh bên có thể được thay đổi kích thước tùy thuộc vào dung lượng mà người dùng cần. Sử dụng các khung hình thay đổi kích thước của thanh bên này được xây dựng in Tuy nhiên, tôi đang gặp một số khó khăn thi đua khả năng này trong jQuery.Giả lập hành vi thay đổi kích thước khung hình bằng các div sử dụng jQuery mà không cần sử dụng jQuery UI?

Tôi không muốn sử dụng jQuery UI để làm điều này, tôi không cần tất cả các chức năng bổ sung mà bộ giao diện người dùng cung cấp, và chỉ muốn viết một vài dòng mã để xử lý việc này.

Tôi chỉ cần thay đổi kích thước trong mặt phẳng nằm ngang, kích thước dọc được cố định.

Hiện tại tôi có giải pháp (loại) hoạt động. Div bên lề có thể được thay đổi kích thước, nhưng chỉ khi người dùng nhấp vào div có thể thay đổi kích thước, kéo chuột, sau đó nhấp lại vào div (để xóa sự kiện di chuột).

Trải nghiệm tôi muốn là: Người dùng di chuột qua div có thể thay đổi kích thước, nhấn nút chuột xuống, sau đó kéo div lớn hơn/nhỏ hơn và nhả nút.

Vấn đề tôi gặp phải là: Nếu người dùng nhấp vào div có thể thay đổi kích thước của tôi, sau đó cố kéo nó để nhỏ hơn/lớn hơn, chuột trở thành biểu tượng "không" và có phiên bản trong suốt div của tôi là thuốc xung quanh bằng chuột.

Có lẽ điều này được giải thích rõ hơn bằng cách kiểm tra mã của tôi :.

$(document).ready(function() { 
var i = 0; 
    $('#dragbar').mousedown(function(){ 
     $('#mousestatus').html("mousedown" + i++); 
     $(document).mousemove(function(e){ 
      $('#position').html(e.pageX +', '+ e.pageY); 
      $('#sidebar').css("width",e.pageX+2); 
     }) 
     console.log("leaving mouseDown"); 
    }); 
    $(document).mouseup(function(){ 
     $('#clickevent').html('in another mouseUp event' + i++); 
     $(document).unbind('mousemove'); 
     }); 
}); 

và HTML:

<div id="header"> 
    header 
    <span id="mousestatus"></span> 
    <span id="clickevent"></span> 
</div> 
<div id="sidebar"> 
    <span id="position"></span> 
    <div id="dragbar"> 
    </div> 
    sidebar 
</div> 
<div id="main"> 
    main 
</div> 
<div id="footer"> 
    footer 
</div> 

Đây là một trang web tạm thời với lao động bố trí cơ bản:

http://pastehtml.com/view/1crj2lj.html

Vấn đề có thể được nhìn thấy nếu bạn cố gắng để thay đổi kích thước điều dán nhãn "sidebar" bằng thanh màu nâu.

+0

Dưới đây là một cách hơi khác để thực hiện: [https://stackoverflow.com/a/48909827/2736742](https://stackoverflow.com/a/48909827/2736742) – amorel

Trả lời

18

Nhìn vào http://www.jsfiddle.net/gaby/Bek9L/

Tôi đã thay đổi diện tích #mainleft:200px (và không có chiều rộng).
Đã thêm e.preventDefault() trên mousedown để tránh việc chọn văn bản xuất hiện.
Trong mã i thay đổi left tài sản của #main cũng vì vậy cả hai bên di chuyển ..


Không chắc chắn những gì bạn có vấn đề thực sự là, nhưng những gì là thấy là các #sidebar được thay đổi kích cỡ nhưng đang diễn ra bên dưới #main và do đó, #dragbar biến mất ..

+0

Vâng, đã sửa nó! Cảm ơn rất nhiều, tôi đã có một cảm giác tôi cần một preventDefault() ở đâu đó! – user210099

+0

Sidenote: Float và vị trí tuyệt đối không sống cùng nhau. [W3C] (http://www.w3.org/TR/CSS2/visuren.html#propdef-position) 9.7 Mối quan hệ giữa 'hiển thị', 'vị trí' và 'phao' _ "nếu 'vị trí' có giá trị 'tuyệt đối' hoặc 'cố định', hộp được đặt hoàn toàn, giá trị tính toán của 'phao' là 'không' ... "_ – uicoded

+0

câu hỏi xuất sắc và trả lời lộng lẫy. Bất cứ ai có nên thấy điều này, mặc dù, bất kỳ con trỏ đến cách tôi có thể ngăn chặn các draggable đi "off trang" khi kéo đến cực hay trái phải không? Và làm thế nào tôi có thể thiết lập chiều rộng tối thiểu và chiều rộng tối đa trên thanh bên và chính? – Benteh

0

Sử dụng event.preventDefault.

$('#dragbar').mousedown(function(e){ 
    e.preventDefault(); 
    // ... 
}); 

Có thể bạn cũng cần gọi số này theo số mousemove.

Các vấn đề liên quan