最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

分別使用vue和Android實(shí)現(xiàn)長(zhǎng)按券碼復(fù)制功能

 更新時(shí)間:2019年10月14日 14:35:46   作者:Sherry慈  
最近分別用vue和Android實(shí)現(xiàn)了一個(gè)券碼復(fù)制功能,長(zhǎng)按券碼會(huì)在上方彈出一個(gè)拷貝的icon提示,點(diǎn)擊icon將券碼內(nèi)容復(fù)制到剪貼板。下面小編給大家?guī)?lái)實(shí)現(xiàn)代碼,需要的朋友參考下吧

最近分別用vue和Android實(shí)現(xiàn)了一個(gè)券碼復(fù)制功能,長(zhǎng)按券碼會(huì)在上方彈出一個(gè)拷貝的icon提示,點(diǎn)擊icon將券碼內(nèi)容復(fù)制到剪貼板。現(xiàn)將一些經(jīng)驗(yàn)代碼分享給大家以供參考。廢話不多說(shuō),先上效果圖

在這里插入圖片描述

vue實(shí)現(xiàn):

npm install clipboard --save

<div class="coupon-count-container" @click="closePopBubble">
 <ul>
  <li v-for="(couponItem, index) in couponArray" :key="index">
   <div class="coupon-code-item">
    <img class="pop-bubble-copy" :style="{left: x + 'px', top: y + 'px', visibility: showPopBubble && index === clickedIndex ? 'visible' : 'hidden'}" src="../../assets/couponPayResult/copy_icon.png" @click="copyToClipboard($event, couponArray[clickedIndex].codeNo)">
    <span class="code-label">券碼:</span><span class="code-active" v-tap="{longMethod: getPopBubble, params: index}">{{couponItem.codeNo}}</span>
   </div>
  </li>
 </ul>
</div>
data: function() {
 return {
  couponArray: [],
  showPopBubble: false,
  x: 0,
  y: 0,
  clickedIndex: 0
 }
}

.coupon-code-item {
 position: relative;
 padding: 10px 0;
 font-size: 13px;
}

.pop-bubble-copy {
 position: absolute;
 width: 73px;
 height: 39px;
}

.code-label {
 margin-left: 28px;
 margin-right: 26px;
 color: #989898;
}

.code-active {
 color: $color-ff5532;
}

methods: {
 closePopBubble() {
  if (this.showPopBubble) {
   this.showPopBubble = false;
  }
 },
 getPopBubble(e, index) {
  this.showPopBubble = true;
  this.clickedIndex = index;
  // 對(duì)x,y的計(jì)算結(jié)果進(jìn)行微調(diào)
  this.x = e.target.offsetLeft + 30;
  this.y = e.target.offsetTop - 40;
 },
 copyToClipboard(e, text) {
  this.showPopBubble = false;
  var clipboard = new Clipboard(e.target, {text: () => text.replace(/\s/g, "")});
  clipboard.on('success', e => {
   // 釋放內(nèi)存
   clipboard.off('error');
   clipboard.off('success');
   clipboard.destroy();
  });
  clipboard.on('error', e => {
   // 釋放內(nèi)存
   clipboard.off('error');
   clipboard.off('success');
   clipboard.destroy();
  });
  clipboard.onClick(e);
 }
}

實(shí)現(xiàn)原理是將氣泡彈窗設(shè)置為絕對(duì)定位,根據(jù)券碼的位置來(lái)計(jì)算氣泡彈窗相對(duì)于父元素的位置,其中父元素為每一條item的包裹元素coupon-code-item

本次的實(shí)現(xiàn)難點(diǎn)是需要自己手動(dòng)定義vue的長(zhǎng)按點(diǎn)擊事件:

Vue.directive('tap',{
 bind:function(el,binding){
  var startTx, startTy,endTx,endTy,longClick,timeOutEvent,
  longMethod=binding.value.longMethod,
  method = binding.value.method,
  params = binding.value.params,
  propagation=binding.value.propagation;
  el.addEventListener("touchstart",function(e){
   var touch=e.touches[0];
   startTx = touch.clientX;
   startTy = touch.clientY;
   if(longMethod && typeof longMethod==='function'){
    longClick=0;
    timeOutEvent =setTimeout(function(){
    longClick=1;
    longMethod(e, params);
    },500)
   }
   if(!propagation){
    if (e.stopImmediatePropagation) {
    e.stopImmediatePropagation();
    } else {
     e.propagationStopped = true;
    }
   }
  },false );
  el.addEventListener("touchmove",function(e){
   if(longMethod && timeOutEvent){
   clearTimeout(timeOutEvent);
   timeOutEvent = 0;
   }
  },false);
  el.addEventListener("touchend",function(e){
   var touch = e.changedTouches[0];
   endTx = touch.clientX;
   endTy = touch.clientY;
   if(longMethod && timeOutEvent){
    clearTimeout(timeOutEvent);
   }
   if((timeOutEvent!=0 && longClick==0)||!longMethod){
    if( Math.abs(startTx - endTx) < 6 && Math.abs(startTy - endTy) < 6){
    if(params instanceof Array){
     method(...params);
    }
    else method(params);
    }
    var focusInput=document.querySelector('input:focus');
    if(focusInput)focusInput.blur();
    var tagName=el.tagName.toLowerCase();
    if(tagName==='input'||tagName==='textarea')el.focus();//獲取焦點(diǎn)
    if(!propagation){
    if (e.stopImmediatePropagation) {
     e.stopImmediatePropagation();
    } else {
     e.propagationStopped = true;
    }
    e.stopPropagation();
    return false;
    }
   }
  },false);
 }
})

Android實(shí)現(xiàn):

Android原生實(shí)現(xiàn)起來(lái)比較簡(jiǎn)單,直接貼代碼

在這里插入圖片描述

以上兩種實(shí)現(xiàn)方法全部完成,為了簡(jiǎn)單直接讓UI切了一張氣泡彈窗的顯示圖,如果感興趣也可以用代碼手動(dòng)繪制

總結(jié)

以上所述是小編給大家介紹的分別使用vue和Android實(shí)現(xiàn)長(zhǎng)按券碼復(fù)制功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • xmind2022下載非試用超詳細(xì)圖文教程

    xmind2022下載非試用超詳細(xì)圖文教程

    這篇文章主要介紹了xmind2022下載非試用(超詳細(xì) 圖文預(yù)警),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • 一文教你在現(xiàn)有Vue項(xiàng)目中嵌入Blazor項(xiàng)目

    一文教你在現(xiàn)有Vue項(xiàng)目中嵌入Blazor項(xiàng)目

    目前官方只提供了angular和react倆種示例,所以本教程將來(lái)講解如何在Vue的現(xiàn)有項(xiàng)目中嵌入使用Blazor項(xiàng)目。文中的方法講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-01-01
  • IDEA開(kāi)啟Run Dashboard的配置詳解

    IDEA開(kāi)啟Run Dashboard的配置詳解

    這篇文章主要介紹了IDEA開(kāi)啟Run Dashboard的配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • centos搭建code-server配置HTTPS登錄頁(yè)自定義實(shí)現(xiàn)步驟

    centos搭建code-server配置HTTPS登錄頁(yè)自定義實(shí)現(xiàn)步驟

    這篇文章主要為大家介紹了centos搭建code-server及配置HTTPS、登錄頁(yè)自定義實(shí)現(xiàn)步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 網(wǎng)絡(luò)基礎(chǔ)-數(shù)據(jù)包

    網(wǎng)絡(luò)基礎(chǔ)-數(shù)據(jù)包

    本文主要講解數(shù)據(jù)包在網(wǎng)絡(luò)中的生命履歷來(lái)引出一些網(wǎng)絡(luò)基礎(chǔ)知識(shí),介紹的比較詳細(xì),需要了解的小伙伴可以自己參考一下
    2021-08-08
  • 微信小程序開(kāi)發(fā)實(shí)例詳解

    微信小程序開(kāi)發(fā)實(shí)例詳解

    這篇文章主要介紹了微信小程序開(kāi)發(fā)實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程

    輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程

    這篇文章主要介紹了輕量級(jí)思維導(dǎo)圖XMind?2023免費(fèi)激活教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Git基礎(chǔ)之git與SVN版本控制優(yōu)缺點(diǎn)區(qū)別分析

    Git基礎(chǔ)之git與SVN版本控制優(yōu)缺點(diǎn)區(qū)別分析

    這篇文章主要為大家介紹了Git基礎(chǔ)之git與SVN優(yōu)缺點(diǎn)及區(qū)別分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • 最新Listary?v5.00.2843注冊(cè)碼?親測(cè)可用

    最新Listary?v5.00.2843注冊(cè)碼?親測(cè)可用

    listary是?windows?下一款可以快速搜索所有程序、文件,并且可以快速啟動(dòng)程序和打開(kāi)相應(yīng)文件的優(yōu)秀的搜索軟件,絕對(duì)比系統(tǒng)自帶搜索速度快很多,而且查詢功能豐富,本文給大家分享Listary?v5.00.2843注冊(cè)碼,感興趣的朋友一起看看吧
    2022-07-07
  • Vscode中l(wèi)aunch.json與tasks.json文件的詳細(xì)介紹

    Vscode中l(wèi)aunch.json與tasks.json文件的詳細(xì)介紹

    在VSCode中,launch.json和tasks.json作為兩個(gè)重要的配置文件,能夠幫助開(kāi)發(fā)者實(shí)現(xiàn)調(diào)試和任務(wù)運(yùn)行的自動(dòng)化配置,下面這篇文章主要給大家介紹了關(guān)于Vscode中l(wèi)aunch.json與tasks.json文件的相關(guān)資料,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

盖州市| 武陟县| 石林| 剑河县| 广汉市| 吐鲁番市| 通山县| 藁城市| 丰都县| 库车县| 泰和县| 大港区| 河北省| 叙永县| 秭归县| 睢宁县| 阜宁县| 青州市| 闽侯县| 吉林市| 龙海市| 三亚市| 富川| 壤塘县| 绥中县| 大关县| 都安| 文昌市| 南投市| 宁波市| 禹州市| 霸州市| 贡嘎县| 桐城市| 墨玉县| 东辽县| 阿拉善盟| 米泉市| 郓城县| 林州市| 肇东市|