2012-12-20 14 views

Odpowiedz

28

Niektóre Googling sugeruje, że jest not supported in CodeMirror ale można achieve it z jQuery UI:

var editor = CodeMirror.fromTextArea(document.getElementById("code"), { 
    lineNumbers: true, 
}); 
$('.CodeMirror').resizable({ 
    resize: function() { 
    editor.setSize($(this).width(), $(this).height()); 
    } 
}); 
+4

Nie zapomnij dodać editor.refresh() po ustawieniu nowego rozmiaru. Debouncing refresh() jest również dobrym pomysłem. – Sergio

+0

@Sergio Co to jest * wyłamywanie *? –

+0

@ TomášZato for debouncing check http://underscorejs.org/#debounce – Sergio

-4

Co próbowaliście?

Właśnie ściągnąłem migawkę rozwojowego CodeMirror z http://codemirror.net/

Running complete.html z katalogu demo ma ładny Resizeable obszar tekstowy (w przeglądarce Chrome). W rzeczywistości przynajmniej kilka innych wersji demonstracyjnych ma również tekstery resizeable.

Jeśli to nie rozwiąże problemu, zaktualizuj go, podając bardziej szczegółowe informacje o tym, co próbowałeś, a co nie.

+0

Brak uchwytów zmiany rozmiaru widocznych tutaj: https://codemirror.net/demo/complete.html –

3

zrobiłem this little example.

Należy pamiętać, że zmienia się rozmiar tylko w pionie, co prawdopodobnie jest tym, czego naprawdę chcesz? Pozioma zdolność zmiany rozmiaru normalnego textarea ma tendencję do łamania układów - zazwyczaj łatwiej jest znaleźć układ, w którym edytor ma stałą szerokość, a zawartość pod nim zostanie zmniejszona, jeśli zmienisz rozmiar.

Nie widziałem projektu, w którym zamierzasz to dopasować, więc zgaduję.

Nie powinno być zbyt trudno to zmienić i uzyskać działający widżet zmiany rozmiaru, który działa w obu kierunkach, jeśli tego właśnie chcesz.

+0

Jak elegancki i czysty wygląd .. Naprawdę to lubię! –

+0

Wykonane z Twojego przykładu: https://github.com/Sphinxxxx/cm-resize – Sphinxxx

0
let CodeMirrorCustomResize = (params) => { 
    var start_x, start_y, start_h, 
     minHeight = params && params.minHeight ? params.minHeight : 150, 
     resizableObj = params && params.resizableObj ? params.resizableObj : '.handle' 

    let onDrag = (e) => { 
     sqlEditor.setSize(null, `${Math.max(minHeight, (start_h + e.pageY - start_y))}px`); 
    } 

    let onRelease = (e) => { 
     $('body').off("mousemove", onDrag); 
     $(window).off("mouseup", onRelease); 
    } 

    $('body').on("mousedown", resizableObj, (e) => { 
     start_x = e.pageX; 
     start_y = e.pageY; 
     start_h = $('.CodeMirror').height(); 

     $('body').on("mousemove", onDrag); 
     $(window).on("mouseup", onRelease); 
    }); 
} 

Jeśli ktoś jest zainteresowany krótsze i bardziej wersją jQuery z @ mindplay.dk odpowiedzi (btw. Dzięki za to).