js实现元素拖动效果
生活随笔
收集整理的這篇文章主要介紹了
js实现元素拖动效果
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
首先看一下演示效果,項目在線演示
實現(xiàn)思路:將元素拖動分為三部分,鼠標按下,鼠標移動,鼠標彈起,分別監(jiān)聽三個事件。首先是定義四個變量startX,startY,sourceX,sourceY,分別代表鼠標點擊的橫縱坐標和物體的橫縱坐標(左上角坐標),接著定義鼠標點擊的監(jiān)聽事件,當鼠標點擊時,記錄鼠標點擊的坐標還有物體的坐標,然后給文檔加上鼠標移動和鼠標彈起事件
當鼠標移動時,獲取鼠標移動后的坐標,用移動后的坐標減去點擊時的坐標,得到移動坐標的差值,在分別加到物體的x,y坐標上;當鼠標彈起時,移除文檔對象的鼠標移動和鼠標彈起監(jiān)聽事件
function move(event){var currentX = event.pageX; //獲取鼠標移動后的坐標var currentY = event.pageY;var disX = currentX - self.startX; //獲取物體應(yīng)該移動的距離var disY = currentY - self.startY;self.setPosition({ //設(shè)置新的位置x: (self.sourceX + disX).toFixed(),y: (self.sourceY + disY).toFixed()}) }function end(event){document.removeEventListener('mousemove', move); //移除文檔對象的鼠標移動和鼠標彈起監(jiān)聽事件document.removeEventListener('mouseup', end); }為了減少回流,我在移動時使用了css3的transform屬性。但在使用前我們要要判斷瀏覽器是否能夠使用,如果不能只能通過改變元素left和top值達到移動的目標
function getTransform(){ //獲取style中的transform屬性,如果沒有則返回空字符串var transform = '',divStyle = document.createElement('div').style,_transforms = ['transform', 'webkitTransform', 'MozTransform', 'msTransform', 'OTransform'],i = 0,len = _transforms.length;for(;i < len; i++){if(_transforms[i] in divStyle){return transform = _transforms[i];}}return transform; }setPosition: function(pos){ //設(shè)置物體坐標if(transform){ //判斷transform是否能用,能的話直接使用translate,不能的話就改變left和top的值this.elem.style['transform'] = 'translate('+pos.x+'px,'+pos.y+'px)'}else{this.elem.style.left = pos.x + 'px';this.elem.style.top = pos.y + 'px';} }上面只介紹了關(guān)鍵代碼,全部源碼在這 https://jsrun.net/ZEXKp/edit,這里源碼用了面向?qū)ο蟮乃枷脒M行了封裝,可以通過下面方式直接創(chuàng)建一個可以移動的元素
new Drag(selector) //selector可以是css選擇器,如'#dragObject',還可以是document的標簽實例若有什么問題,歡迎提問
總結(jié)
以上是生活随笔為你收集整理的js实现元素拖动效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tiff转bmp的实现
- 下一篇: 盘点国产BI软件中,那些电商数据分析功能