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 17 Vue.js
vue实现登录、注册、退出、跳转等功能
Dec 23 Vue.js
vue实现简易的双向数据绑定
Dec 29 Vue.js
Vue使用Ref跨层级获取组件的步骤
Jan 25 Vue.js
如何在 Vue 中使用 JSX
Feb 14 Vue.js
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 Vue.js
Vue.js 带下拉选项的输入框(Textbox with Dropdown)组件
Apr 17 Vue.js
vue首次渲染全过程
Apr 21 Vue.js
关于vue中如何监听数组变化
Apr 28 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
vue选项卡切换的实现案例
Apr 11 Vue.js
vue elementUI批量上传文件
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 fsockopen写的HTTP下载的类
2007/02/22 PHP
PHP插入排序实现代码
2013/04/04 PHP
PHP实现根据浏览器跳转不同语言页面代码
2013/08/02 PHP
php防止SQL注入详解及防范
2013/11/12 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
Using the TextRange Object
2006/10/14 Javascript
JavaScript 参考教程
2006/12/29 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
浅谈使用splice函数对数组中的元素进行删除时的注意事项
2016/12/04 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
vue计算属性computed的使用方法示例
2019/03/13 Javascript
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
js实现抽奖功能
2020/11/24 Javascript
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
Python基础教程之利用期物处理并发
2018/03/29 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
PyTorch如何搭建一个简单的网络
2020/08/24 Python
css3一个简易的 LED 数字时钟实现方法
2020/01/15 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
学校安全工作制度
2014/01/19 职场文书
乡镇群众路线整改落实情况汇报
2014/10/28 职场文书
整改落实情况汇报材料
2014/10/29 职场文书
2014年综治维稳工作总结
2014/11/17 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
Pytorch 中net.train 和 net.eval的使用说明
2021/05/22 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis