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项目利用axios请求接口下载excel
Nov 17 Vue.js
Vue 修改网站图标的方法
Dec 31 Vue.js
vue 动态创建组件的两种方法
Dec 31 Vue.js
vue中父子组件的参数传递和应用示例
Jan 04 Vue.js
通过vue.extend实现消息提示弹框的方法记录
Jan 07 Vue.js
浅谈Vue开发人员的7个最好的VSCode扩展
Jan 20 Vue.js
vue集成一个支持图片缩放拖拽的富文本编辑器
Jan 29 Vue.js
Vue实现圆环进度条的示例
Feb 06 Vue.js
vue实现可拖拽的dialog弹框
May 13 Vue.js
vue.js Router中嵌套路由的实用示例
Jun 27 Vue.js
VUE之图片Base64编码使用ElementUI组件上传
Apr 09 Vue.js
vue @click.native 绑定原生点击事件
Apr 22 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(2)――PHP类型
2010/02/15 PHP
PHP命名空间(Namespace)简明教程
2014/06/11 PHP
PHP与MYSQL中UTF8 中文排序示例代码
2014/10/23 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
实例讲解PHP表单处理
2019/02/15 PHP
网页javascript精华代码集
2007/01/24 Javascript
用javascript实现自定义标签
2007/05/08 Javascript
javascript通过class来获取元素实现代码
2013/02/20 Javascript
Javascript事件实例详解
2013/11/06 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
JS基于面向对象实现的多个倒计时器功能示例
2017/02/28 Javascript
JS点击缩略图整屏居中放大图片效果
2017/07/04 Javascript
js如何编写简单的ajax方法库
2017/08/02 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
JS数组求和的常用方法总结【5种方法】
2019/01/14 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
Vue实现导航栏的显示开关控制
2019/11/01 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
vue ssr+koa2构建服务端渲染的示例代码
2020/03/23 Javascript
Vue自动构建发布脚本的方法示例
2020/07/24 Javascript
JS实现放大镜效果
2020/09/21 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
python3写爬取B站视频弹幕功能
2017/12/22 Python
初次部署django+gunicorn+nginx的方法步骤
2019/09/11 Python
python tkinter组件摆放方式详解
2019/09/16 Python
python实现人机五子棋
2020/03/25 Python
Python 使用SFTP和FTP实现对服务器的文件下载功能
2020/12/17 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
获奖的大学生创业计划书
2014/01/05 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
2015年学校安全管理工作总结
2015/05/11 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
创业计划书之养殖业
2019/10/11 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js