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 24 Vue.js
vue element-ul实现展开和收起功能的实例代码
Nov 25 Vue.js
vue监听滚动事件的方法
Dec 21 Vue.js
Vue实现小购物车功能
Dec 21 Vue.js
基于VUE实现简单的学生信息管理系统
Jan 13 Vue.js
Vue中避免滥用this去读取data中数据
Mar 02 Vue.js
原生JS封装vue Tab切换效果
Apr 28 Vue.js
vue引入Excel表格插件的方法
Apr 28 Vue.js
如何理解Vue简单状态管理之store模式
May 15 Vue.js
vue2实现provide inject传递响应式
May 21 Vue.js
Vue实现tab导航栏并支持左右滑动功能
Jun 28 Vue.js
vue.js 使用原生js实现轮播图
Apr 26 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中的排序函数sort、asort、rsort、krsort、ksort区别分析
2014/08/18 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
PHP中Http协议post请求参数
2015/11/02 PHP
PHP基于cookie与session统计网站访问量并输出显示的方法
2016/01/15 PHP
两种php实现图片上传的方法
2016/01/22 PHP
微信推送功能实现方式图文详解
2019/07/12 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
Javascript学习笔记9 prototype封装继承
2010/01/11 Javascript
jquery设置控件位置的方法
2013/08/21 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
js动态生成Html元素实现Post操作(createElement)
2015/09/14 Javascript
原生JS实现图片轮播效果
2016/12/26 Javascript
用nodejs搭建websocket服务器
2017/01/23 NodeJs
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
webpack热模块替换(HMR)/热更新的方法
2018/04/05 Javascript
vue使用技巧及vue项目中遇到的问题
2018/06/04 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
深入理解Vue keep-alive及实践总结
2019/08/21 Javascript
layui清空,重置表单数据的实例
2019/09/12 Javascript
Vue data的数据响应式到底是如何实现的
2020/02/11 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
vue-cli3配置favicon.ico和title的流程
2020/10/27 Javascript
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python3+PyQt5 自定义窗口部件--使用窗口部件样式表的方法
2019/06/26 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
jupyter notebook远程访问不了的问题解决方法
2021/01/11 Python
工程测量与监理专业应届生求职信
2013/11/27 职场文书
2014年个人债务授权委托书范本
2014/09/22 职场文书
教师批评与自我批评
2014/10/15 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers