Vue2版本 六边形 蜂窝 Demo

效果图展示

Code details

<template>
  <div class="container">
    <div class="block" v-for="item in list">
      <img
          style="object-fit: cover;width: 100%;height: 100%;"
          :src="portrait"
          alt=""/>
    </div>
  </div>
</template>

<script>
//https://wlypublic.oss-cn-beijing.aliyuncs.com/image/2020-02/1581410400840.png
import portrait from '@/assets/1.jpg'

export default {
  name: 'HexagonDemo4',
  data() {
    return {
      portrait: portrait,
      list: new Array(13).fill(0),
      RADICAL_3: 1.7320508,
      myWidth: 220,
      myGap: 3
    }
  },
  computed: {
    width() {
      return this.myWidth + 'px'
    },
    marginLeftRight() {
      return this.myGap + 'px'
    },
    height() {
      return Math.ceil(parseInt(this.width) * 1.1) + 'px';
    },
    marginTop() {
      return ((parseInt(this.width) / -3.8) + parseInt(this.marginLeftRight)) + 'px';
    }
  },
  created() {
    setTimeout(() => {
      this.arrange()
    }, 5)
    window.onresize = this.arrange
  },
  methods: {
    arrange() {
      let offsetTop = 0
      let lineIndex = 0
      document.querySelectorAll(".block").forEach(item => {
        item.style.marginLeft = '5px'
        if (offsetTop !== item.offsetTop) {
          ++lineIndex
          if (lineIndex % 2 === 0) {
            item.style.marginLeft = (parseInt(this.width) * 0.5 + parseInt(this.marginLeftRight) * 0.5) + 7 + 'px'
          }
        }
        offsetTop = item.offsetTop;
        // console.log(lineIndex)
        // console.log(item.offsetTop)
      })
    }
  }
}
</script>

<style lang="less" scoped>
.container {
  /*display: grid;*/
  margin-top: 80px;
  background-color: ghostwhite;
  //width: 80vw;
  float: left;
  /*height: 140px;*/
}

.block {
  display: inline-block;
  width: v-bind(width);
  height: v-bind(height);
  margin-right: v-bind(marginLeftRight);
  margin-top: v-bind(marginTop);
  clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%);
  float: left;
  background-color: #fff2aa;
  //box-shadow: inset 0 0 50px 20px red;
}
</style>

 

 下载地址:Vue2版本六边形蜂窝Demo-Javascript文档类资源-CSDN下载

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Vue是一种用于构建用户界面的渐进式 JavaScript 框架,而jsPlumb是一个用于在网页上创建可拖拽连接线的JavaScript库。结合Vue和jsPlumb可以实现动态生成可拖拽并且连接的元素的效果。 使用Vue2和jsPlumb插件来创建一个demo时,首先需要引入Vue和jsPlumb的相关文件。然后,创建一个Vue实例来管理demo应用的数据和行为。 在Vue模板中,可以使用v-for指令和v-bind指令来动态渲染元素,使用v-on指令来绑定事件,以及使用jsPlumb提供的API来创建可拖拽并且连接的元素。 首先,在Vue的data中定义要生成的元素的数据数组,每个元素包含位置、样式和唯一标识等属性。然后,在Vue的created生命周期钩子中,使用jsPlumb的makeSource方法将元素设置为可拖拽并且可以连接的源端点。 接着,在模板中使用v-for指令遍历数据数组,动态渲染元素,并使用v-bind指令绑定元素的属性。同时,使用v-on指令绑定元素的拖拽事件。 在Vue的methods中,可以定义一个鼠标拖拽的回调函数,该回调函数会根据拖拽的位置将元素的位置属性进行更新。还可以定义一个连接的回调函数,当连接两个元素时,会触发该回调函数,可以在其中执行一些逻辑操作。 最后,在Vue的mounted生命周期钩子中,使用jsPlumb的makeTarget方法将元素设置为可拖拽并且可以连接的目标端点。 通过以上步骤,就可以创建一个基于Vue2和jsPlumb插件的demo,实现动态生成可拖拽并且连接的元素的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值