2010-11-19 31 views
9

Vì vậy, tôi đã có một applcation web ở giữa wireframing, nhưng tôi đã chạy vào một vấn đề đòi hỏi một giải pháp kỹ thuật trước khi tôi có thể củng cố mô hình này; mà con người:. (. một div với max-width)Làm thế nào để kiểm tra khi nào div thay đổi kích thước, sử dụng Javascript hoặc Jquery

  • Hình # 1 tài khoản tạo mới 'text-trường' yếu tố tài khoản sau đó bắt đầu gõ vào nói yếu tố cho đến khi ...

  • hình. # 2 Yếu tố đạt nó max-width, các văn bản giảm xuống một dòng mới và một hình nền 'mới' (trong dạng div khác) được tạo ra (với opacity của nó và vị trí hoạt hình cho hiệu ứng) để chứa các phần tử lớn hơn s ze.

UX model concept

Đây là một phác thảo sơ bộ các chức năng dự định (cho tại thời điểm này, tôi không chắc chắn làm thế nào để có một văn bản-lĩnh vực mà hoạt động như một div với max-width chưa) nhưng Tôi tò mò về cách tạo trình xử lý sự kiện cho bước thứ hai; Tôi đã nghĩ đến việc kiểm tra mọi sự kiện 'chấm dứt', nhưng điều đó có vẻ không hiệu quả ...

Có ai có lời khuyên hay ý tưởng nào để giải quyết vấn đề như thế này không? Cảm ơn!

+0

+1 cho sơ đồ có độ tinh khiết –

Trả lời

1

Trong MSIE, việc kích hoạt lại sẽ kích hoạt.

+0

Giả sử 'onresize' sẽ hoạt động cho div trong Internet Explorer, nhưng tôi không thể đủ khả năng để thực hiện phương pháp này ... nó (chưa từng có) chỉ hoạt động trong IE. – jlmakes

+1

Vì vậy, bạn muốn bỏ qua tùy chọn, một trình duyệt cung cấp cho bạn chính xác thứ bạn cần (onresize on elements)? Kỳ dị! Bạn có thể thử làm việc với các sự kiện quan trọng được đề xuất (chúng có kích hoạt nếu dữ liệu bị cắt hoặc dán không?). Đặt khoảng thời gian để kiểm tra kích thước? Khoảng thời gian không bao giờ là một thực hành tốt nếu bạn có thể tránh chúng! Có những giải pháp khác tốt hơn nhiều. Cái tôi đăng cho MSIE. Cái còn lại là DOMSubtreeModified, được hỗ trợ bởi gecko và webkit. Nó không phải là thông minh như IE-onresize, nhưng hoạt động tốt. Kiểm tra các fiddle: http://jsfiddle.net/doktormolle/fJmGZ/ –

+0

Không thiếu tôn trọng tất nhiên! Ứng dụng này cần phải hoạt động hoàn hảo trên tất cả các trình duyệt, vì vậy giải pháp chỉ có IE là thẳng thắn không liên quan; câu trả lời tiếp theo của bạn (và ví dụ) trông tuyệt vời! Tôi sẽ lấy lại -1 nếu tôi có thể ... Tôi đang kiểm tra nó gần hơn bây giờ, và đọc trên DOMSubtreeModified. – jlmakes

3

Sự kiện 'keydown' hoặc 'keyup' là điều đầu tiên bạn nghĩ đến. Nếu bạn quyết định làm theo cách này, bạn sẽ phải kiểm tra kích thước phần tử html mỗi lần và so sánh nó với biến số cũ (lưu trong biến).

Cách dễ nhất có vẻ là liên kết trình xử lý với phần tử html và để nó kích hoạt khi kích thước thay đổi. Tôi không biết nếu một sự kiện như vậy tồn tại, nhưng nếu đó là cách để đi.

(+1 cho Câu hỏi rất mô tả của bạn)

+0

+1 cho +1 của bạn ... – davidsleeps

+0

Tôi vẫn không chắc chắn cách lấy trường văn bản/trường nhập có thể thay đổi kích thước, nhưng cách tiếp cận 'khóa/lên' ... họ bấm và giữ một lá thư - điều đó sẽ không phá vỡ mô hình của tôi? – jlmakes

+2

Trên KeyDown đặt khoảng thời gian JS để tiếp tục kiểm tra độ dài đầu vào và thay đổi kích thước theo từ khóa. Sau đó, KeyUp sẽ xóa khoảng thời gian và thực hiện kiểm tra lần cuối trong đầu vào. Điều này sẽ giải quyết vấn đề Nhấn và giữ của bạn. – Brady

2

Bạn có thể thử bằng cách sử dụng chức năng chuyển tiếp CSS3:
http://slides.html5rocks.com/#slide42
Bằng cách đó các yếu tố bạn muốn có thể được sinh động bởi trình duyệt riêng của mình.

Tuyên bố từ chối trách nhiệm: Rõ ràng, điều này không hoạt động với các hiệu ứng phức tạp hơn.

+0

Đó là khá gọn gàng - làm thế nào là điều này khác nhiều so với sử dụng Jquery để animate nó? Tôi không biết làm thế nào thoải mái tôi đang chuyển sang HTML5 chỉ ... từ những gì tôi hiểu, đó là một loại tài liệu hoàn toàn khác nhau với một bộ khác nhau của các vấn đề tương thích. – jlmakes

+0

@JulianDroid - Không bị lẫn lộn bởi HTML5 và CSS3, chúng là hai thứ riêng biệt. Chỉ cần được nhận thức mặc dù nếu bạn bắt đầu sử dụng CSS3 bây giờ tất cả trình duyệt IE sẽ không thấy CSS3 mới lạ mắt. – Brady

+0

Nó không phải là rất khác nhau, khác với thực tế là bạn có thể thiết lập một thời gian hoạt hình cho mọi sự kiện có thể. I E. bạn không cần phải theo dõi khi các nhân vật đến cuối dòng, bạn chỉ cần nói với nó "khi bạn cố gắng thay đổi kích thước, hãy làm điều đó với một hoạt hình". – x10

1

Không chắc chắn cách tấn công vấn đề chiều rộng khi trường nhập tự động kích thước cho đến khi chiều rộng tối đa sau đó kết thúc tốt đẹp. Bạn có thể sử dụng một phông chữ monospace bên trong trường văn bản để bạn có thể sử dụng javascript để theo dõi và kiểm soát sự tăng trưởng của hộp theo chiều ngang tăng chiều rộng tối đa.

Để tiếp cận tự động phát triển chiều cao, bạn nên sử dụng textarea với nó được đặt thành một hàng để bắt đầu vì vậy nó trông giống như hộp nhập và sau đó văn bản tự động kết thúc đến hàng tiếp theo. bạn có thể kiểm tra scollHeight của textarea và kiểm tra chiều cao thực tế của textarea, trừ chúng và bạn nhận được chiều cao bạn cần để phát triển textarea để ngăn chặn các thanh cuộn dọc xuất hiện.

Ở trên sẽ làm cho các thanh cuộn bật và tắt một thời gian ngắn trong khi javascript của bạn thực hiện điều đó. Bạn có thể sử dụng overflow:auto; để ẩn các thanh cuộn nhưng sau đó tôi không biết nếu scrollHeight vẫn sẽ đọc chính xác. Bạn sẽ cần phải thử nghiệm.

Cũng lưu ý đến nhận xét của tôi ở trên về việc thiết lập khoảng thời gian khi nhấn phím và kiểm tra độ dài đầu vào để dừng sự cố văn bản từ khóa lặp lại.

+0

Vì vậy, những gì gây nên kiểm tra cho "scrollHeight?" Tôi thấy rằng vùng văn bản có thể mở rộng có thể khó hơn việc kiểm tra kích thước vùng chứa của nó ... lol - Tôi nên bắt đầu câu hỏi thứ hai. Tôi không thể chỉ đặt chiều cao dòng trong vùng văn bản, và sau đó (có thể sau khi đạt đến giới hạn ký tự nhất định) thay đổi chiều cao theo cách thủ công để tăng gấp đôi chiều cao dòng? Ứng dụng web này sẽ không cho phép nhiều hơn 2 dòng ... – jlmakes

+0

Tôi cần phải tìm thư rộng nhất và tìm hiểu chiều rộng của vùng chứa sẽ bằng 'giới hạn ký tự trên mỗi dòng' đó là ...và sau đó tìm một cách để truy vấn có bao nhiêu chữ cái hiện đang nhập một 'keydown', vì vậy tôi có thể thiết lập chiều rộng vùng văn bản thành "# of letters" x "chiều rộng của chữ cái rộng nhất." – jlmakes

+0

Mỗi lần nhấn phím, bạn kiểm tra số ký tự được nhập để phát triển hộp theo chiều ngang và sau đó khi bạn nhấn vào kiểm tra dừng chiều rộng tối đa cho nó. Trên mỗi phím bấm kiểm tra scrollHeight, nếu scrollheight là nhiều hơn chiều cao thực tế của khu vực văn bản sau đó văn bản đã được bọc lên một dòng mới để mở rộng các hàng văn bản ... – Brady

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