123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- <template>
- <div class="spec-preview">
-
- <el-image
- :src="imgUrl"
- alt=""
- fit="cover"
- style="width: 100%; height: 100%"
- ></el-image>
- <div
- class="event"
- @mousemove="handler"
- @mouseleave="leave"
- @click="$emit('handleViwer')"
- ></div>
-
-
- <div class="mask" ref="mask"></div>
-
- </div>
- </template>
-
- <script>
- export default {
- name: "Zoom",
- props: {
- imgUrl: String,
- },
- data() {
- return {
- };
- },
- methods: {
- handler(event) {
- let mask = this.$refs.mask;
-
-
- let left = event.offsetX - mask.offsetWidth / 2;
- let top = event.offsetY - mask.offsetHeight / 2;
-
- if (left <= 0) left = 0;
- if (left >= mask.offsetWidth) left = mask.offsetWidth;
- if (top <= 0) top = 0;
- if (top >= mask.offsetHeight) top = mask.offsetHeight;
-
- mask.style.left = left + "px";
- mask.style.top = top + "px";
-
-
- let obj = {};
- obj.left = left;
- obj.top = top;
- obj.bigShow = true;
- this.$emit("sendStyle", obj);
- },
- leave() {
- let obj = {};
- obj.left = 0;
- obj.top = 0;
- obj.bigShow = false;
- this.$emit("sendStyle", obj);
- },
- },
- };
- </script>
-
- <style lang="scss" scoped>
- .spec-preview {
- position: relative;
- width: 100%;
- height: 100%;
- img {
- width: 100%;
- height: 100%;
- }
- .event {
- width: 100%;
- height: 100%;
- position: absolute;
- top: 0;
- left: 0;
- z-index: 1;
- }
- .mask {
- width: 50%;
- height: 50%;
- background-color: rgba(100, 149, 237, 0.3);
- position: absolute;
- left: 0;
- top: 0;
- display: none;
- }
- .big {
- width: 100%;
- height: 100%;
- position: absolute;
- top: -1px;
- left: 100%;
- border: 1px solid #aaa;
- overflow: hidden;
- z-index: 1;
- display: none;
- background: white;
- img {
- width: 200%;
- max-width: 200%;
- height: 200%;
- position: absolute;
- left: 0;
- top: 0;
- }
- }
- .event:hover ~ .mask,
- .event:hover ~ .big {
- display: block;
- }
-
- }
- </style>
-
|