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组件简易模拟实现购物车
Dec 21 Vue.js
Vue 简单实现前端权限控制的示例
Dec 25 Vue.js
如何在VUE中使用vue-awesome-swiper
Jan 04 Vue.js
jenkins自动构建发布vue项目的方法步骤
Jan 04 Vue.js
Vue 实现可视化拖拽页面编辑器
Feb 01 Vue.js
vue3如何优雅的实现移动端登录注册模块
Mar 29 Vue.js
一文带你理解vue创建一个后台管理系统流程(Vue+Element)
May 18 Vue.js
vue项目支付功能代码详解
Feb 18 Vue.js
vue实现滑动解锁功能
Mar 03 Vue.js
vue3引入highlight.js进行代码高亮的方法实例
Apr 08 Vue.js
vue组件冲突之引用另一个组件出现组件不显示的问题
Apr 13 Vue.js
vue css 相对路径导入问题级踩坑记录
Jun 05 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 八种基本的数据类型小结
2011/06/01 PHP
基于initPHP的框架介绍
2013/04/18 PHP
php cURL和Rolling cURL并发方式比较
2013/10/30 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
jQuery 瀑布流 浮动布局(一)(延迟AJAX加载图片)
2012/05/23 Javascript
jquery中的事件处理详细介绍
2013/06/24 Javascript
自定义ExtJS控件之下拉树和下拉表格附源码
2013/10/15 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
用console.table()调试javascript
2014/09/04 Javascript
js+html5绘制图片到canvas的方法
2015/06/05 Javascript
javascript滚轮控制模拟滚动条
2016/10/19 Javascript
JS常见简单正则表达式验证功能小结【手机,地址,企业税号,金额,身份证等】
2017/01/22 Javascript
react 应用多入口配置及实践总结
2018/10/17 Javascript
了解javascript中let和var及const关键字的区别
2019/05/24 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
Vue项目打包部署到iis服务器的配置方法
2019/10/14 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
python字典基本操作实例分析
2015/07/11 Python
Python对列表中的各项进行关联详解
2017/08/15 Python
2020新版本pycharm+anaconda+opencv+pyqt环境配置学习笔记,亲测可用
2020/03/24 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
keras分类之二分类实例(Cat and dog)
2020/07/09 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
Tomcat的缺省是多少,怎么修改
2014/04/09 面试题
好的自荐信的要求
2013/10/30 职场文书
医药专业推荐信
2013/11/15 职场文书
老总助理工作岗位职责
2014/02/06 职场文书
大学活动总结范文
2014/04/29 职场文书
卫生厅领导班子党的群众路线教育实践活动整改措施
2014/09/20 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
学习党章心得体会2016
2016/01/15 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript