AngularJS實(shí)現(xiàn)的鼠標(biāo)拖動(dòng)畫(huà)矩形框示例【可兼容IE8】
本文實(shí)例講述了AngularJS實(shí)現(xiàn)的鼠標(biāo)拖動(dòng)畫(huà)矩形框。分享給大家供大家參考,具體如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> html {color: #000;overflow-y: scoll;overflow: -moz-scrollbars-vertical} body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin: 0; padding: 0; overflow: hidden; } #longzhoufeng { position: relative; left: 0; top: 0; margin: 0 auto; padding: 0; width: 800px; min-height: 800px; overflow: auto; height: 1000px; background-color: #e9e9e9; } .dashed-box { position: absolute; border: 1px dashed red; width: 0px; height: 0px; left: 0px; top: 0px; overflow: hidden; } #moving_box { border: 2px solid red; } .question-box { position: absolute; /* older safari/Chrome browsers */ -webkit-opacity: 0.5; /* Netscape and Older than Firefox 0.9 */ -moz-opacity: 0.5; /* Safari 1.x (pre WebKit!) 老式khtml內(nèi)核的Safari瀏覽器*/ -khtml-opacity: 0.5; /* IE9 + etc...modern browsers */ opacity: .5; /* IE 4-9 */ filter: alpha(opacity=50); /*This works in IE 8 & 9 too*/ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; /*IE4-IE9*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); } .question-border { border: 2px dashed red; overflow: hidden; z-index: 1; } .del-box { width: 20px; height: 20px; float: right; color: #fff; position: relative; margin-top: 1px; margin-right: 1px; z-index: 99; background-color: red; } .active-border { border: 2px solid red; -webkit-opacity: 0.5; /* Netscape and Older than Firefox 0.9 */ -moz-opacity: 0.5; /* Safari 1.x (pre WebKit!) 老式khtml內(nèi)核的Safari瀏覽器*/ -khtml-opacity: 0.5; /* IE9 + etc...modern browsers */ opacity: .5; /* IE 4-9 */ filter: alpha(opacity=50); /*This works in IE 8 & 9 too*/ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; /*IE4-IE9*/ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=50); } .box-background-image { position: absolute; width: 1000px; height: 1600px; } </style> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script> <script src="https://cdn.bootcss.com/angular.js/1.0.5/angular.min.js"></script> <script> var app = angular.module('miniapp', []); function AppController($scope, $timeout) { //阻止默認(rèn)行為 function stopDefault(e) { if(e && e.preventDefault) e.preventDefault(); else window.event.returnValue = false; return false; } $scope.bgImg = '1.jpg'; $scope.getBoxPicSize = function() { $scope.bgWidth = angular.element(".box-background-image").width(); $scope.bgHeight = angular.element(".box-background-image").height(); } /////////////////////////////////////// var wId = "num"; var index = 0; var target = null; var startX = 0, startY = 0; var flag = false; var startL = 0, startT = 0, boxHeight = 0, boxWidth = 0; var boxObj = document.getElementById("longzhoufeng"); var frame = $("#longzhoufeng"); var frameBox = { "pos": frame.offset(), "width": frame.outerWidth(), "height": frame.outerHeight() } var newMarkPos = { "left": startL,//按下時(shí)鼠標(biāo)距離的左邊的距離 "top": startT//按下時(shí)鼠標(biāo)距離的上邊的距離 } var myEvent = $scope.myEvent = { //鼠標(biāo)點(diǎn)擊 mouseDown: function(e) { flag = true; var e = window.event || e; target = e.target || e.srcElement; //獲取document 對(duì)象的引用 //e.pageY,e.pageX兼容 if(target.src) { stopDefault(e) } var scrollTop = boxObj.scrollTop; var scrollLeft = boxObj.scrollLeft; var ePageX = e.clientX + scrollLeft; var ePageY = e.clientY + scrollTop; //按下時(shí)鼠標(biāo)距離頁(yè)面的距離 startX = ePageX; startY = ePageY; //按下時(shí)鼠標(biāo)距離的左邊和上邊的距離 startL = startX - frameBox.pos.left; startT = startY - frameBox.pos.top; index++; var div = document.createElement("div"); div.id = wId + index; div.className = "dashed-box"; boxObj.appendChild(div); div = null; // 如果鼠標(biāo)在 box 上被按下 if(target.className.match(/del-box/i)) { // 允許拖動(dòng) flag = false; // 設(shè)置當(dāng)前 box 的 id 為 moving_box var movingBox = document.getElementById("moving_box") if(movingBox !== null) { movingBox.removeAttribute("id"); } target.id = "moving_box"; // removeBox(target); } else { var div = document.createElement("div"); div.id = wId + index; div.className = "dashed-box"; boxObj.appendChild(div); div = null; } }, //鼠標(biāo)離開(kāi) mouseUp: function(e) { var e = window.event || e; if(boxWidth >= 1 || boxHeight >= 1) { boxObj.removeChild(dragBox(wId + index)); index++; var div = document.createElement("div"); div.className = "question-box question-border"; div.style.left = newMarkPos.left + "px"; div.style.top = newMarkPos.top + "px"; div.style.width = boxWidth + "px"; div.style.height = boxHeight + "px"; boxObj.appendChild(div); div = null; boxWidth = 0; boxHeight = 0; } else { if(flag) { boxObj.removeChild(dragBox(wId + index)); } } flag = false; }, //鼠標(biāo)移動(dòng) mouseMove: function(e) { var e = window.event || e; stopDefault(e) if(flag) { var scrollTop = boxObj.scrollTop; var scrollLeft = boxObj.scrollLeft; var ePX = e.clientX + scrollLeft; var ePY = e.clientY + scrollTop; var disW = ePX - startX; var disH = ePY - startY; var L = startL + disW; var T = startT + disH; if(disW > 0) { if(L >= 0) { boxWidth = disW } newMarkPos.left = startL; } else { if(L <= 0) { L = 0; boxWidth = startL; } boxWidth = (startL - L); newMarkPos.left = L; } if(disH > 0) { if(T >= 0) { boxHeight = disH } newMarkPos.top = startT; } else { if(T <= 0) { T = 0; boxHeight = startT; } boxHeight = (startT - T) newMarkPos.top = T; } dragBox(wId + index).style.left = newMarkPos.left + "px"; dragBox(wId + index).style.top = newMarkPos.top + "px"; dragBox(wId + index).style.width = Math.abs(boxWidth) + "px"; dragBox(wId + index).style.height = Math.abs(boxHeight) + "px"; if(e.srcElement.src) { stopDefault(e) } } } } var dragBox = function(id) { return document.getElementById(id); } } //等待圖片加載完成 app.directive("loadImage", function() { return { restrict: 'A', link: function(scope, element, attrs) { element.bind('load', function() { scope.$apply(attrs.loadImage); }); } } }) </script> </head> <body> <div ng-app="miniapp" ng-controller="AppController"> <div class="main"> <div id="longzhoufeng" ng-mousedown="myEvent.mouseDown($event)" ng-mouseup="myEvent.mouseUp($event)" ng-mousemove="myEvent.mouseMove($event)"> <img ng-src="{{bgImg}}" class="box-background-image" load-image="getBoxPicSize()"> </div> </div> </div> </body> </html>
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于AngularJS相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《AngularJS指令操作技巧總結(jié)》、《AngularJS入門與進(jìn)階教程》及《AngularJS MVC架構(gòu)總結(jié)》
希望本文所述對(duì)大家AngularJS程序設(shè)計(jì)有所幫助。
相關(guān)文章
AngularJS學(xué)習(xí)筆記(三)數(shù)據(jù)雙向綁定的簡(jiǎn)單實(shí)例
這篇文章主要介紹了AngularJS學(xué)習(xí)筆記(三)數(shù)據(jù)雙向綁定的簡(jiǎn)單實(shí)例,詳解數(shù)據(jù)雙向綁定實(shí)例的相關(guān)資料,需要的朋友可以參考下。2016-11-11解析AngularJS中g(shù)et請(qǐng)求URL出現(xiàn)的跨域問(wèn)題
本文主要介紹了AngularJS中g(shù)et請(qǐng)求URL出現(xiàn)跨域問(wèn)題。需要的朋友可以參考下2016-12-12ios設(shè)備中angularjs無(wú)法改變頁(yè)面title的解決方法
今天小編就為大家分享一篇ios設(shè)備中angularjs無(wú)法改變頁(yè)面title的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-09-09AngularJs 國(guó)際化(I18n/L10n)詳解
本文主要介紹AngularJs 國(guó)際化的知識(shí),這里整理了詳細(xì)的資料來(lái)講解國(guó)際化,有需要的小伙伴可以參考下2016-09-09詳解使用angularjs的ng-options時(shí)如何設(shè)置默認(rèn)值(初始值)
本篇文章主要介紹了詳解使用angularjs的ng-options時(shí)如何設(shè)置默認(rèn)值(初始值),具有一定的參考價(jià)值,有興趣的可以了解一下2017-07-07AngularJS 實(shí)現(xiàn)購(gòu)物車全選反選功能
這篇文章主要介紹了AngularJS 實(shí)現(xiàn)購(gòu)物車全選反選功能,需要的朋友可以參考下2017-10-10Angular移動(dòng)端頁(yè)面input無(wú)法輸入的解決方法
下面小編就為大家?guī)?lái)一篇Angular移動(dòng)端頁(yè)面input無(wú)法輸入的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11