Vue定义与应用

mian.js 中注册自定义指令

Vue.directive('nsresize', {

inserted(el) {    let startY = 0;    let down = false;    let prevEl;    let nextEl;    $(el).bind("mousedown", event => {        startY = event.pageY;        down = true;        prevEl = event.target.previousElementSibling;        nextEl = event.target.nextElementSibling;    });    $(document).bind("mouseup", () => {        startY = 0;        down = false;    });    $(document).bind("mousemove", event => {        if ( down ) {            let y = event.pageY - startY;            startY = event.pageY;            $(prevEl).height($(prevEl).height() + y);            $(nextEl).height($(nextEl).height() - y);        }    });}

});
Vue.directive('ewresize', {

inserted(el) {    let startX = 0;    let down = false;    let prevEl;    let nextEl;    $(el).bind("mousedown", event => {        startX = event.pageX;        down = true;        prevEl = event.target.previousElementSibling;        nextEl = event.target.nextElementSibling;    });    $(document).bind("mouseup", () => {        startX = 0;        down = false;    });    $(document).bind("mousemove", event => {        if ( down ) {            let x = event.pageX - startX;            startX = event.pageX;            let temp = $(prevEl).width() + x;            let px = temp + "px";            $(prevEl).width(temp);            $(nextEl).css("left", px);            $(nextEl).css("padding-right", px);            $(el).css("left", px);        }    });}

});

css定义

.h-split {
margin-bottom: -1px;
cursor: s-resize;
padding-top: 10px;
}

.v-split {
padding-right: 7px;
background-color: transparent;
cursor: ew-resize;
position: absolute;
height: 100%;
left: 500px;
top: 150px;
z-index: 10;
}

组件中应用

<div class="v-split" v-ewresize></div>
<div class="h-split" v-nsresize></div>

angular定义与应用

common.js定义指令

.directive('nsresize', function () {

        return {            link: function (scope, el, attrs, ngModel) {                var startY = 0;                var down = false;                var prevEl;                var nextEl;                $(el).bind("mousedown", function (event) {                    startY = event.pageY ;                    down = true;                    prevEl = event.target.previousElementSibling;                    nextEl = event.target.nextElementSibling;                });                $(document).bind("mouseup", function (event) {                    startY = 0;                    down = false;                });                $(document).bind("mousemove", function (event) {                    if ( down ) {                        var y = event.pageY-startY;                        startY = event.pageY;                        $(prevEl).height($(prevEl).height() + y);                        $(nextEl).height($(nextEl).height() - y);                    }                });            }        }    })    .directive('ewresize', function () {        return {            restrict: 'EA',            scope: {                cell: '@'            },            link: function (scope, el, attrs, ngModel) {                var startX = 0;                var down = false;                var prevEl;                var nextEl;                $(el).bind("mousedown", function (event) {                    startX = event.pageX ;                    down = true;                    prevEl = event.target.previousElementSibling;                    nextEl = event.target.nextElementSibling;                });                $(document).bind("mouseup", function (event) {                    startX = 0;                    down = false;                });                $(document).bind("mousemove", function (event) {                    if ( down ) {                        var x = event.pageX - startX;                        startX = event.pageX;                        var temp = $(prevEl).width() + x;                        var px = temp + "px";                        $(prevEl).width(temp);                        $(nextEl).css("left", px);                        if ( !scope.cell ) {                            $(nextEl).css("padding-right", px);                        }                        $(el).css("left", px);                    }                });            }        }    })

css定义

.h-split {
margin-bottom: -1px;
cursor: s-resize;
padding-top: 10px;
}

.v-split {
padding-right: 7px;
background-color: transparent;
cursor: ew-resize;
position: absolute;
height: 100%;
left: 500px;
top: 150px;
z-index: 10;
}

组件中应用

<div class="v-split" ewresize></div>
<div class="h-split" nsresize></div>