Vue3.0 手写放大镜效果


Posted in Vue.js onJuly 25, 2021

需要实现的效果是: 固定放大两倍,鼠标进入到左侧图片区域的时候,遮罩层显示,离开时,遮罩层隐藏。

Vue3.0 手写放大镜效果

 

鼠标跟随效果如何实现: (子绝父相)绝对定位 +  修改top,left控制移动 

在@vueuse中,有一个工具方法:useMouseInElement

<template>
  <div ref="target">
    <h1>Hello world</h1>
  </div>
</template>
 
<script>
import { ref } from 'vue'
import { useMouseInElement } from '@vueuse/core'
 
export default {
  setup() {
    const target = ref(null)
 
    const { x, y, isOutside } = useMouseInElement(target)
 
    return { x, y, isOutside }
  }
}
</script>

这是VueUse 官网上的用法,最后,别忘了return { target } 我一开始没return target,x,y,isOutside的值是 0,0,false,并不是变化的值。

鼠标的位置和遮罩的位置之间的关系: 

Vue3.0 手写放大镜效果 

<div class="layer" :style="layerStyle"></div> //这是遮罩层
setup(){   //下面是实现鼠标跟随的代码
const layerStyle = reactive({
      top: '0px',
      left: '0px'
    })
    // 监听三个值的变化,watch第一个参数用数组
    watch([elementX, elementY, isOutside], () => {
      // layerStyle.left = elementX.value / 2 + 'px'
      // layerStyle.top = elementY.value / 2 + 'px'
      let top = elementY.value - 100
      let left = elementX.value - 100
 
      // 给遮罩元素赋值位置
      if (top < 0) top = 0
      if (top > 200) top = 200
      if (left < 0) left = 0
      if (left > 200) left = 200
      layerStyle.top = top + 'px'
      layerStyle.left = left + 'px'
    })
    return { elementX, elementY, isOutside, target, layerStyle }
 
}

遮罩区域不能超出左侧的父盒子,上面有两行是我注释掉的代码,为什么合起来写不行呢,因为后面我需要加判断时,会发现判断完之后  加px的时候,你会发现无从下手,上面这种分开写的话,top,left 只是一个数值,等计算完成后,再加单位。 

 Vue3.0 手写放大镜效果Vue3.0 手写放大镜效果

放大效果如何实现:  

css 样式里面有个 background-size属性,第一个参数指宽度,第二个参数指高度,可以放大图片

本身是 400 *400,那放大两倍就是 800*800

css 样式里面的 background-position-x, background-position-y 可以放大指定区域

关于background-position: x,y   第一个值是水平位置,第二个值是垂直位置

 这是右侧具有放大效果的div:

<div class="large" :style="{ backgroundImage:`url(${images[current]})`,...largeStyle }"></div>

Vue3.0 手写放大镜效果

这是css代码,可以参考一下: 

.large {
   position: absolute;
    top: 0;
    left: 412px;
    width: 400px;
    height: 400px;
    box-shadow: 0 0 10px rgba(0,0,0,0.1);
    background-repeat: no-repeat;
    background-size: 800px 800px;
    background-color: #f8f8f8;
 }

最后: 当鼠标移出左侧盒子区域,遮罩隐藏,右侧放大的盒子也隐藏

useMouseInElement的isOutSide属性可以监测到是否超出监测元素,v-show="!isOutSide" 即可

到此这篇关于Vue3.0 手写放大镜效果的文章就介绍到这了,更多相关Vue3.0 手写放大镜效果内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
vue 基于abstract 路由模式 实现页面内嵌的示例代码
Dec 14 Vue.js
vue中activated的用法
Jan 03 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
详解vue中v-for的key唯一性
May 15 Vue.js
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
May 25 Vue.js
VUE使用draggable实现组件拖拽
Apr 06 Vue.js
vue实力踩坑之push当前页无效
Apr 10 Vue.js
vue封装数字翻牌器
Apr 20 Vue.js
vue 自定义的组件绑定点击事件
Apr 21 Vue.js
vue递归实现树形组件
Jul 15 Vue.js
vue项目多环境配置(.env)的实现
Vue Element-ui表单校验规则实现
Jul 09 #Vue.js
Vue3.0中Ref与Reactive的区别示例详析
Jul 07 #Vue.js
Vue项目打包、合并及压缩优化网页响应速度
idea编译器vue缩进报错问题场景分析
Vue实现导入Excel功能步骤详解
Vue图片裁剪组件实例代码
You might like
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
Thinkphp5 如何隐藏入口文件index.php(URL重写)
2019/10/16 PHP
THINKPHP5.1 Config的配置与获取详解
2020/06/08 PHP
phpstorm激活码2020附使用详细教程
2020/09/25 PHP
URL地址中的#符号使用说明
2011/02/12 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
express文件上传中间件Multer详解
2016/10/24 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
小程序点餐界面添加购物车左右摆动动画
2020/09/23 Javascript
[07:31]DOTA2卡尔工作室 英雄介绍主宰篇
2013/06/25 DOTA
python操作excel的包(openpyxl、xlsxwriter)
2018/06/11 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
python 判断字符串中是否含有汉字或非汉字的实例
2019/07/15 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Tensorflow 实现释放内存
2020/02/03 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
使用Python实现NBA球员数据查询小程序功能
2020/11/09 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
Stubhub英国:购买体育、演唱会和剧院门票
2018/06/10 全球购物
护理学毕业生求职信
2013/11/14 职场文书
女大学生个人求职信
2013/12/09 职场文书
社区平安建设汇报材料
2014/08/14 职场文书
酒店客房服务员岗位职责
2015/04/09 职场文书
OpenCV-Python模板匹配人眼的实例
2021/06/08 Python
Python+Selenium实现读取网易邮箱验证码
2022/03/13 Python
Mysql索引失效 数据库表中有索引还是查询很慢
2022/05/15 MySQL