Vue 仿探探拖拽卡片的效果

2021-02-13 前端大全

已更新Vue3版,請給 前端大全 發送關鍵字 vue3仿探探 獲取Vue3版

類似Tinder和探探的卡片效果的組件,社區中已經非常多了。我這一版除了可以實現和他們一樣的效果外。還增加了飛卡的效果,就是類似我的女神邱淑貞這樣。

可以將卡片朝任意拖拽方向飛出去,必須得帥是不是!

下面帶大家一步步來實現這個效果

先疊起來

其實我最早實現這個效果,是在2018年的時候,在weex上實現過一版。原帖請看這裡:https://zhuanlan.zhihu.com/p/37482853

咱們這次不要求在weex裡可用,所以疊起來非常簡單。

首先讓三個卡片按照近大遠小的原則分別設置設置z-index,寬和高,比如每一層卡片的寬和高比上一層卡片要縮小20個像素(還有一種做法是通過zoom或者scale來設置遠處卡片的縮小級別)。然後加入絕對定位position:absolute和z-index就可以將卡片層疊起來了。

拖動第一張卡

因為只有第一張卡片可以拖動,所以我們只要監聽第一張卡片的拖動事件。比如touchstart,touchmove,touchcancel,touchend。

拖動的時候需要注意,在touchstart的時候記錄一下手指按下的位置,在touchmove時要減去這個位置,看上去就是點哪兒從哪兒拖。

touchStart:function(e){
 var curTouch=e.touches[0];
 this.startLeft=curTouch.clientX-this.left;
 this.startTop=curTouch.clientY-this.top;
}
touchMove:function(e){
 var curTouch=e.touches[0];
 this.left=curTouch.clientX-this.startLeft;
 this.top=curTouch.clientY-this.startTop;
}

飛出去

要實現超任意拖拽方向飛出去這個效果,需要用到一些數學公式。

計算卡片當前拖拽的坐標和起始坐標的夾角

var angle=Math.atan2((當前坐標.y-起點坐標.y), (當前坐標.x-起點坐標.x));


飛出去的落點x軸坐標通過計算angle的餘弦值再乘以力度得出

this.left=Math.cos(angle)*this.throwDistance;

飛出去的落點y軸坐標通過計算angle的正弦值再乘以力度得出

this.top=Math.sin(angle)*this.throwDistance;

這裡咱們做得再完善一些,在拖動結束時去判斷一下當前拖動的距離是否足夠觸發飛卡效果。如果不觸發飛卡效果,則觸發回位效果。這樣的話也可以防止用戶誤操作。

//計算兩點之間的直線距離
getDistance:function(x1, y1, x2, y2) {
    var _x = Math.abs(x1 - x2); 
    var _y = Math.abs(y1 - y2); 
    return Math.sqrt(_x * _x + _y * _y);
}
            
var distance=this.getDistance(0,0,this.left,this.top);
if(distance>this.throwTriggerDistance){
    this.makeCardThrow();
}else{
    this.makeCardBack();
}

下層的卡片上推

上推其實很簡單,一開始的時候,我就定義了四張(不是3張嗎?怎麼變4張了)卡片的大小和位置。

當第一張卡飛出去後

this.width2=this.cardWidth;
this.height2=this.cardHeight;
this.left2=0;
this.top2=0;


this.width3=(this.cardWidth-this.leftPad*2);
this.height3=(this.cardHeight-this.topPad*2);
this.left3=this.leftPad;
this.top3=(this.topPad*3);


第4張卡片原本是透明的,現在變為第3張卡片的位置和大小
this.width4=(this.cardWidth-this.leftPad*4);
this.height4=(this.cardHeight-this.topPad*4);
this.left4=this.leftPad*2;
this.top4=(this.topPad*6);
this.opacity4=1;


我把陰影效果先去掉,大家觀察一下這個細節

重置所有卡片

底層的卡片上推和第一張卡片的飛出效果是同時進行的,由css的transition來控制。不過時間是我們設定好的,所以只要在上推和飛出的動畫時間結束後,我們重置一下所有4張卡片的大小和位置即可。

this.onThrowStart();
setTimeout(function(){
    that.isThrow=false;
    that.isAnimating=false;
    that.onThrowDone();
    that.resetAllCard();
},400);


這裡需要注意,所有四張卡片都需要瞬間完成重置,所以這步之前應該禁用掉transition動畫。

組件化

為了適應各種使用場景,我們要將這個效果封裝一下。

//提供幾個事件,分別是拖動時,拖動結束,飛卡結束,飛卡失敗(回位)
@onDragMove='onCardDragMove'
@onDragStop='onCardDragStop'
@onThrowDone='onCardThrowDone'
@onThrowFail='onCardThrowFail'

//參數就不細說了,都能看明白
:cardWidth="200" 
:cardHeight="200"
cardBgColor="#fff"
:leftPad="10"
:topPad="6"
:borderRadius="8"
:throwTriggerDistance="100"
dragDirection="all"
:hasShadow="false"
:hasBorder="true"


提供三個slot,你可以非常方便的往卡片裡塞內容

//firstCard,secondCard,thirdCard
<slot name="firstCard"></slot>


現在來模仿幾個效果某乎的推薦回答
@onDragMove='onCardDragMove'
@onDragStop='onCardDragStop'
@onThrowDone='onCardThrowDone'
:cardWidth="300" 
:cardHeight="120"
:throwTriggerDistance="100"
dragDirection="horizontal"
:hasShadow="true"


僅允許水平拖動

由於改變寬高會導致文字換行變化,也許卡片用縮放的話,用戶體驗會更好一些吧

探探的效果

實現探探效果的核心是監聽卡片拖動的位置

onCardDragMove(obj){
    if(obj.left<-10){
        this.actionName="不喜歡";
    }else if(obj.left>10){
        this.actionName="喜歡";
    }else{
        this.actionName="";
    }
}


源碼倉庫

https://github.com/ezshine/ezflycard

已更新Vue3版,請給 前端大全 發送關鍵字 vue3仿探探 獲取Vue3版

相關焦點

  • 1小時搞定卡片拖拽、自動排列交換位置、拖拽數據存取
    :流暢的拖動和交換位置效果,並實時更新數據支持組件的樣式和內容自定義這是這次系列文章的第一篇,我自己封裝了一個用vue實現的拖拽排列卡片組件,並且發布到npm,詳細地記錄下來了整體製作過程。這是vue實現的拖動卡片組件,主要實現了:拖動卡片與其他卡片的位置更換,並且其他卡片根據拖動的位置自動順移,位置數據實時更新拖動的時候可使用滑鼠滾動卡片根據數據生成,所有參數和內容都是可以自定義的,方便應用於不同場景不同操作的事件都可獲取到,拖動後的位置數據會實時更新可以全局安裝和按需加載
  • 外賣探探是真的嗎?外賣探探返現是真的嗎?外賣探探什麼時候出來的?
    外賣探探外賣是什麼平臺外賣探探是真的嗎?外賣探探返現是真的嗎?外賣探探什麼時候出來的?  外賣探探合作對接了美團、餓了麼的一個外賣平臺  為什麼選擇外賣探探  因為通過外賣探探去美團、餓了麼點外賣可以領取高額優惠券,分享他人通過外賣探探點外賣還能賺錢真正的管道收益
  • 探探直播的探探幣是什麼意思 探探的探探幣怎麼獲得
    探探直播的探探幣是什麼意思?探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合顏值才藝聊天主播來開播。有多人感興趣,就在問,探探的探探幣怎麼獲得?一起來看看和小編來看看吧。
  • 探探直播公會怎麼入駐 探探直播公會MCN入駐的好處壞處
    探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做直播。有多人在問,探探直播公會怎麼入駐?探探直播公會MCN入駐的好處壞處?一起來看看吧。 探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做直播。有多人在問,探探直播公會怎麼入駐?
  • 探探pk是什麼意思 探探主播直播間主播pk要怎麼玩
    探探pk是什麼意思?探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合顏值才藝聊天主播來開播。有多人感興趣,就在問,探探主播直播間pk要怎麼玩?一起 探探pk是什麼意思?探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合顏值才藝聊天主播來開播。
  • 探探充值中心(探探幣充值平臺)
    探探充值中心,探探幣充值平臺,樂充助手,探探充值,探探幣充值,探探充值平臺,探探快速充值探探幣,探探幣充值中心,1分鐘自動充值到帳!
  • Soul、探探競品分析-陌生人社交
    定位原因探探:希望用戶通過探探可以找到自己的伴侶,同時目標用戶主要瞄準的也是白領市場,希望這部分缺少時間的人,可以通過探探的高效匹配,找到生命中的伴侶。Soul:則強調用戶之間通過靈魂互相吸引,希望用戶通過靈魂匹配,遇到自己的Soulmate。3.
  • 探探如何掛靠,探探聯營該怎麼做
    探探最近開啟了直播公會的入住,由於較為艱難的任務條件以及門檻,很多想入駐探探直播的公會或組織無法入駐。所以,在經歷了抖音模式掛靠聯營的興起,大部分中小型無法入駐的公會以掛靠合作的形式進行合作便是極佳的一種方式目前探探直播剛開放直播,所有公會初始分成都是40%,前期打包給合作機構是40-60% 完全的對公結算,由公會結算給主播,正因如此,探探對於公會的要求更為嚴格,且嚴厲禁止拖欠薪資的行為。
  • 使用electron+vue開發一個跨平臺todolist(便籤)桌面應用
    它目前的功能還非常簡單,但是包含了很多我使用electron時遇到問題,這也是electron新手都很可能遇到的,也算是一個技術總結吧;比如:electron無邊框透明窗口/拖拽/置頂/閃爍問題以下是項目README:# 3xhznl-todo-list:sparkles
  • 再見了,探探
    楊楊最近一次登陸探探,已經是幾個月前了。有了新的戀情之後,他說:「我可能再也不會用探探了。」臉上的笑容蕩開,感染著身邊每一個人。楊楊家住北京,大學學計算機專業。朋友給他推薦了探探。像打開了一扇門,他見到了一個完全嶄新的世界。「我原來的世界太小了,所以才會迷戀派對上的驚鴻一瞥。」幾個月後,楊楊在探探上認識了他第一個女友。那是一個做舞臺劇表演的女孩,他很喜歡對方的職業。而太愛,卻導致了自卑。彼時,他自己還在為工作糾結,關於自我,關於愛情,全方位混沌。
  • 電影裡的十大囧探,最後一個是他?
    電影裡的十大囧探,最後一個竟然是他!警匪電影一直都是觀影者十分喜愛的電影類型,但是有的警匪電影太過壓抑,於是那些「活寶警探」類電影就誕生了。他們不僅會辦案,還能在辦案的過程中賣萌耍賤。《警察故事》成龍港式喜劇《警察故事》,成龍非常善於以出人意料的動作來製造喜劇效果,在雜技般驚險的追逐裡頻抖笑料包袱,讓觀眾忍俊不禁,藉此也增加了陳家駒這一角色的人格魅力,賦予角色極高辨識度。
  • 探探直播平臺怎麼樣能賺錢嗎 探探怎麼直播當主播
    有多人在問,探探直播平臺怎麼樣能賺錢嗎?探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做秀場。
  • 探探要如何加入主播粉絲團 探探主播粉絲團加入怎麼做
    探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做秀場。有多人在問,探探要如何加入主播粉絲團?探探主播粉絲團加入怎麼做呢?一起來看看吧。 探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做秀場。有多人在問,探探要如何加入主播粉絲團?
  • 探探直播公會怎麼入駐
    探探公會代入駐,新直播公司課程培訓,從平臺玩法規則,公司選址裝修硬體設備採購,運營主播招募渠道建設,到主播直播技巧等從0到1的系統培訓指導。關注公眾號:【星播課堂】提交方式將以上材料整理髮送至探探公會入駐官方郵箱。郵箱標題為「公會名稱—初審」,將在十個工作日內以郵件的方式將審核結果反饋給各個公會」「替播」等行為的主播。
  • 陌陌和探探哪個好用 陌陌和探探的區別介紹
    陌陌和探探哪個好用 陌陌和探探的區別介紹 陌陌和探探哪個好用?陌陌和探探的區別介紹。陌陌和探探都是非常受年輕人喜歡的社交軟體,很多人喜歡用探探,覺得探探比較好,也有很多人覺得陌陌比探探好,那麼到底是探探好還是陌陌好,下面就讓小編來為大家介紹一下這兩者的區別吧!
  • 探探禮物嘉年華多少錢 探探直播主播禮物價格一覽
    探探禮物嘉年華多少錢?探探是一款很受歡迎的交友軟體,用戶們可以進行直播送禮,也可以收到禮物,下面小編就來介紹一下探探直播主播禮物價格一覽吧。
  • 探探和陌陌哪個靠譜 探探和陌陌哪個更好用
    探探是一個基於大數據智能推薦、全新互動模式的社交App。那麼探探和陌陌哪個靠譜?探探和陌陌哪個好用?一起來看看吧。 而探探根據用戶的個人資料、位置、興趣愛好等信息,計算並推送身邊與你匹配的人,幫助用戶結識互有好感的新朋友。 陌陌:為約會而生的聊天軟體 使用人群:懷春女生都會用,不用管他們籤名寫的什麼,上這個軟體就是約會用的。 女生質量:高顏值女生、渣女、各種牛鬼神蛇鬼妹等等。
  • 探探直播禮物的價格表 探探直播的各個禮物價格都是多少
    探探直播的各個禮物價格都是多少?探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合顏值才藝聊天主播來開播。有多人感興趣,就在問,探探直播禮物的價格表有嗎?一起來看看和小編來看看吧。
  • 探探直播如何取消關注 探探直播app怎麼取消關注的主播
    探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做秀場。有多人在問,探探直播如何取消關注?探探直播app怎麼取消關注的主播?一起來看看吧。 探探推出直播,作為陌生人社交起家的探探,天生就有著用戶打賞的意願和習慣,非常適合做秀場。有多人在問,探探直播如何取消關注?
  • Soul和探探的競品分析——陌生人社交APP分析
    探探用戶 性別分布:男性用戶居多 根據艾瑞指數顯示:探探男女比例約為1.43:1;就性別比例來說符合中國正常男女性別比例。在交友方面,男性在最開始交友時對於外貌的關注度高,因此探探的產品定位恰好滿足了這一需求。