JSFiddle - React, Tailwind, and code Playground
HTML
<link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/ui-lightness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
<script src="http://code.jquery.com/ui/1.10.2/jquery-ui.min.js"></script>
<div ng-app="my-app">
<div ng-controller="MyCtrl">
<p>Loan Required: {{ loanRequired | currency:'£' }}</p>
<div linked-slider value="loanRequired" link="propertyValue" condition="propertyValue < loanRequired" step="10000" min="50000" max="500000"></div>
<p>Property Value: {{ propertyValue | currency:'£' }}</p>
<div linked-slider value="propertyValue" link="loanRequired" condition="propertyValue < loanRequired" step="10000" min="50000" max="500000"></div>
<p>Loan to Value: {{ ((loanRequired / propertyValue) * 100) | number:0 }}{{"%"}}</p>
</div>
</div>
CSS
body {
font-family:'Arial', 'Sans'
}
JavaScript
var app = angular.module('my-app', ['ngSanitize']);
app.controller('MyCtrl', function ($scope) {
$scope.loanRequired = 100000;
$scope.propertyValue = 120000;
});
app.directive('linkedSlider', function () {
return {
restrict: 'A',
scope: {
value: '=',
link: '=',
step: '@',
min: '@',
max: '@',
condition: '&'
},
link: function (scope, element) {
setTimeout(function () {
$(element).slider({
min: parseInt(scope.min),
max: parseInt(scope.max),
step: parseInt(scope.step),
value: parseInt(scope.value),
slide: function (event, ui) {
scope.$apply(function () {
scope.value = ui.value;
});
if (scope.condition()) {
scope.$apply(function () {
scope.link = ui.value;
});
}
}
});
scope.$watch('value', function (newValue) {
$(element).slider('value', newValue);
});
scope.$watch('link', function (newValue) {});
}, 1);
}
};
});