Edit: umieścić ten fragment kodu w jsbin: http://jsbin.com/eneruJak pozwolić na zmianę rozmiaru DIV tylko z jQuery - bez wtyczek?
Próbuję niech Resize użytkownika (tylko pionowo) elementu DIV z jQuery. Czytałem o jQuery UI, próbowałem go i po kilku minutach działałem. Ale biblioteka dodaje obciążenie w wysokości około 25 KB, którego chciałbym uniknąć, ponieważ chcę tylko prostej zmiany rozmiaru w pionie.
Więc próbowałem zrobić to sam. Tutaj jest HTML, Używam inline stylizacji dla jasności:
<div id="frame" style="border: 1px solid green; height: 350px">
<div style="height: 100%">Lorem ipsum blah blah</div>
<span id="frame-grip" style="display: block; width: 100%; height: 16px; background: gray"></span>
</div>
Jak widać, nie jest mały bar pod elementu DIV, dzięki czemu użytkownik może przeciągnąć go w górę lub w dół, aby zmienić rozmiar DIV. Tutaj jest kod Javascript (jQuery):
$(document).ready(function(){
var resizing = false;
var frame = $("#frame");
var origHeightFrame = frame.height();
var origPosYGrip = $("#frame-grip").offset().top;
var gripHeight = $("#frame-grip").height();
$("#frame-grip").mouseup(function(e) {
resizing = false;
});
$("#frame-grip").mousedown(function(e) {
resizing = true;
});
$("#frame-grip").mousemove(function(e) {
if(resizing) {
frame.height(e.pageY - origPosYGrip + origHeightFrame - gripHeight/2);
}
});
});
To działa, mniej lub bardziej, ale jeśli przeciągnij pasek zbyt szybko, to zatrzymuje się zgodnie z ruchem myszy i przerw wszystko.
Po raz pierwszy próbuję zrobić coś poważnego (ahem) z JS i jQuery, więc może robię coś głupiego. Jeśli tak, to proszę mi powiedzieć :)
Jeśli już pracowałeś, to nie martw się o to. Martw się, gdy ludzie zaczną narzekać lub masz 5000 użytkowników na minutę trafiających na stronę i zaczyna cię to kosztować. NIE WCZEŚNIE OPTYMALIZUJ! – Soviut
Dzięki. W rzeczywistości witryna ma około 100 000 dziennych odsłon stron i obsługuje prawie 100 KB nieskompresowanych skryptów JavaScript. Wstawiam jQuery UI, a gdy jest minified i gzipowany, jest mniejszy niż wcześniej :) –