vue + elementUI 表格右鍵彈出菜單

效果


image.png

右鍵點(diǎn)擊靠下的位置


image.png
 <!--表格頁代碼 -->
<template>
  <div class="hello">
    <el-table
        :data="tableData"
        @row-contextmenu="rowContextmenu"
        border
        style="width: 100%">
      <el-table-column
          prop="date"
          label="日期"
          width="180">
      </el-table-column>
      <el-table-column
          prop="name"
          label="姓名"
          width="180">
      </el-table-column>
      <el-table-column
          prop="address"
          label="地址">
      </el-table-column>
    </el-table>
     <context-button v-if="menuVisible" @foo="foo" ref="contextbutton" @handleOne="handleOne" @handleTwo="handleTwo" @handleThree="handleThree"></context-button>
  </div>
</template>

<script>
  import contextButton from './contextButton/index'
  export default {
    data() {
      return {
        tableData: [{
          date: '2016-05-02',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1518 弄'
        }, {
          date: '2016-05-04',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1517 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        }, {
          date: '2016-05-01',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1519 弄'
        },  {
          date: '2016-05-03',
          name: '王小虎',
          address: '上海市普陀區(qū)金沙江路 1516 弄'
        }],
        menuVisible: false,
      }
    },
    components: {
      contextButton
    },
    methods: {
      rowContextmenu (row, column, event) {
        this.menuVisible = false
        this.menuVisible = true
        // 阻止右鍵默認(rèn)行為
        event.preventDefault()
        this.$nextTick(() => {
          this.$refs.contextbutton.init(row,column,event)
        })
      },
      foo() { // 取消鼠標(biāo)監(jiān)聽事件 菜單欄
        this.menuVisible = false
        document.removeEventListener('click', this.foo)
      },
      handleOne () {
        console.log('點(diǎn)擊菜單一')
      },

      handleTwo () {
        console.log('點(diǎn)擊菜單二')
      },
      handleThree () {
        console.log('點(diǎn)擊菜單三')
      },
    }
  }
</script>

==================================================

 <!-- 菜單頁代碼  contextButton/index.vue -->
<template>
  <div id="contextmenu" class="contextmenu">
    <div class="contextmenu__item" @click="handleOne()">菜單一</div>
    <div class="contextmenu__item" @click="handleTwo()">菜單二</div>
    <div class="contextmenu__item" @click="handleThree()">菜單三</div>
  </div>
</template>

<script>
    export default {
      name: "index",
      data () {
         return {
          }
      },
      methods: {
        init (row, column,event) {
          // 設(shè)置菜單出現(xiàn)的位置
          // 具體顯示位置根據(jù)自己需求進(jìn)行調(diào)節(jié)
          let menu = document.querySelector('#contextmenu')
          let cha = document.body.clientHeight - event.clientY
          console.log(document.body.clientHeight,event.clientY,cha)
          // 防止菜單太靠底奄薇,根據(jù)可視高度調(diào)整菜單出現(xiàn)位置
          if (cha < 150) {
            menu.style.top = event.clientY -120 + 'px'
          } else {
            menu.style.top = event.clientY -10 + 'px'
          }
          menu.style.left = event.clientX + 10 + 'px'
          document.addEventListener('click', this.foo) // 給整個(gè)document添加監(jiān)聽鼠標(biāo)事件,點(diǎn)擊任何位置執(zhí)行foo方法

        },
        foo () {
          this.$emit('foo')
        },
        handleOne () {
          this.$emit('handleOne')
        },
        handleTwo () {
          this.$emit('handleTwo')
        },
        handleThree () {
          this.$emit('handleThree')
        },
      }
    }
</script>

<style scoped>
  .contextmenu__item {
    display: block;
    line-height: 34px;
    text-align: center;
  }
  .contextmenu__item:not(:last-child) {
    border-bottom: 1px solid rgba(64,158,255,.2);
  }
  .contextmenu {
    position: absolute;
    background-color: #ecf5ff;
    width: 100px;
    /*height: 106px;*/
    font-size: 12px;
    color: #409EFF;
    border-radius: 4px;
    -webkit-box-sizing: border-box;
    box-sizing: border-box;
    border: 1px solid rgba(64,158,255,.2);
    white-space: nowrap;
    z-index: 1000;
  }
  .contextmenu__item:hover {
    cursor: pointer;
    background: #66b1ff;
    border-color: #66b1ff;
    color: #fff;
  }
</style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抗愁,一起剝皮案震驚了整個(gè)濱河市馁蒂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜘腌,老刑警劉巖沫屡,帶你破解...
    沈念sama閱讀 221,576評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異撮珠,居然都是意外死亡谁鳍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倘潜,“玉大人绷柒,你說我怎么就攤上這事′桃颍” “怎么了废睦?”我有些...
    開封第一講書人閱讀 168,017評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)养泡。 經(jīng)常有香客問我嗜湃,道長(zhǎng),這世上最難降的妖魔是什么澜掩? 我笑而不...
    開封第一講書人閱讀 59,626評(píng)論 1 296
  • 正文 為了忘掉前任购披,我火速辦了婚禮,結(jié)果婚禮上肩榕,老公的妹妹穿的比我還像新娘刚陡。我一直安慰自己,他們只是感情好株汉,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,625評(píng)論 6 397
  • 文/花漫 我一把揭開白布筐乳。 她就那樣靜靜地躺著,像睡著了一般乔妈。 火紅的嫁衣襯著肌膚如雪蝙云。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,255評(píng)論 1 308
  • 那天路召,我揣著相機(jī)與錄音勃刨,去河邊找鬼。 笑死股淡,一個(gè)胖子當(dāng)著我的面吹牛身隐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播揣非,決...
    沈念sama閱讀 40,825評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼抡医,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了早敬?” 一聲冷哼從身側(cè)響起忌傻,我...
    開封第一講書人閱讀 39,729評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搞监,沒想到半個(gè)月后水孩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,271評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琐驴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,363評(píng)論 3 340
  • 正文 我和宋清朗相戀三年俘种,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秤标。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,498評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡宙刘,死狀恐怖苍姜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情悬包,我是刑警寧澤衙猪,帶...
    沈念sama閱讀 36,183評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站布近,受9級(jí)特大地震影響垫释,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撑瞧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,867評(píng)論 3 333
  • 文/蒙蒙 一棵譬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧预伺,春花似錦订咸、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涩禀。三九已至料滥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艾船,已是汗流浹背葵腹。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屿岂,地道東北人践宴。 一個(gè)月前我還...
    沈念sama閱讀 48,906評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像爷怀,于是被迫代替她去往敵國(guó)和親阻肩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,507評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 本文講述的核心庫:_winreg 平時(shí)在Windows下安裝一些軟件后,會(huì)發(fā)現(xiàn)自動(dòng)添加了一些右鍵菜單功能吁朦,方便日常...
    m2fox閱讀 11,323評(píng)論 2 13
  • 圖靈社區(qū)教程 當(dāng)用戶在網(wǎng)頁中點(diǎn)擊鼠標(biāo)右鍵后柒室,會(huì)喚出一個(gè)菜單,在上面有復(fù)制逗宜、粘貼和翻譯等選項(xiàng)雄右,為用戶提供快捷便利的功...
    SingleDiego閱讀 442評(píng)論 0 1
  • Spread JS 本身支持豐富的右鍵菜單功能空骚,包括單元格區(qū)域、行頭區(qū)域擂仍、列頭區(qū)域囤屹、角標(biāo)區(qū)、表單標(biāo)簽區(qū)域等都可以用...
    前端小碼哥閱讀 1,473評(píng)論 0 3
  • 1.控制臺(tái)輸入年齡逢渔,根據(jù)年齡輸出不同的提示(例如:老年人牺丙,青壯年,成年人复局,未成年冲簿,兒童) 2.計(jì)算5的階乘 5!的...
    窮到?jīng)]有姓名閱讀 75評(píng)論 0 0
  • 淡藍(lán)的火焰舔舐著瓦罐 酒水與杯盞纏綿 鹿與玫瑰廝磨 木樨香的梵音如醉 晨曦的雨露還不肯墜 紫砂壺上積了幾層灰 墻上...
    程北閱讀 498評(píng)論 2 1