当前位置: 首页 > news >正文

网站建设 回本网络营销推广策略

网站建设 回本,网络营销推广策略,做毕设好的网站,如何做网站跳转前言概述 JavaScript 结合 CSS 打造的一款图片特效,当鼠标拖拽滑块时,让本该置灰的图片局部恢复本来的颜色。且该效果随着你的鼠标的按下时的移动而移动。 核心功能 图片置灰 拖拽功能 让滑块位置处的图片恢复本来的颜色 实现原理 这个的实现原理并不…

前言概述

JavaScript 结合 CSS 打造的一款图片特效,当鼠标拖拽滑块时,让本该置灰的图片局部恢复本来的颜色。且该效果随着你的鼠标的按下时的移动而移动。

核心功能

  • 图片置灰
  • 拖拽功能
  • 让滑块位置处的图片恢复本来的颜色

实现原理

这个的实现原理并不复杂,我们只需要一张背景图作为我们的素材,再单独定义一个滑块让并使用背景图裁剪的方式动态去显示图片的不同位置。

实现手电筒的框架

搭建框架

要实现这个功能,首先需要根据结构搭建一个样式结构出来

// css
/* 外层容器 */
.container {position: relative;width: 500px;height: 300px;
}/* 图片 */
.baImg {display: block;width: 100%;height: 100%;filter: grayscale(100%);user-select: none;/* 阻止图片被拖拽 */-webkit-user-drag: none;
}/* 手电筒 */
.move {position: absolute;width: 100px;height: 100px;top: 0;left: 0;border-radius: 50%;background: url("./1.png") no-repeat;background-size: 500px 300px;background-position: 0 0;/* 增加盒子阴影 */box-shadow: 0 0 5px 5px #fff; 
}
// html
<div class="container"><!-- 背景图 --><img class="baImg" src="./1.png" alt=""><!-- 手电筒 --><div class="move"></div>
</div>

!! -webkit-user-drag: none; 是 CSS 控制一个元素和它的内容是否可以被拖拽

取值

auto:使用默认的拖拽行为,这种情况只有图片和链接可以被拖拽。
element:整个元素(不仅仅只是它的内容)可拖拽。
none:元素不能被拖动。在通过选中后可拖拽。

filter: grayscale(100%); 是 CSS 用来定义元素(通常是图片)的视觉滤镜效果

grayscale: 将图片转换为灰阶,数值的大小表示转换的程度,区间在 0 - 100
更多参数可以参考 菜鸟教程- filter 的使用

根据上述的样式和结构搭建出来的结果,它就长下图这个样子
在这里插入图片描述

逻辑处理

首先我们需要给手电筒增加拖拽功能,在拖拽过程中动态获取鼠标的移动距离,然后更新手电筒本身的位置,并使用 background-clip 背景图裁剪的方式将原图的部分区域裁剪到手电筒的容器内显示原图,这样基本上就可以实现手电筒的效果了。

  1. 获取外层容器和手电筒的元素,并用容器的大小减去手电筒本身的大小
  2. 给手电筒增加拖拽效果,根据上述计算出来的大小限制拖拽范围
  3. 拖拽过程中得到拖拽的位置,更新手电筒本身的位置、背景图裁剪的位置
// 获取最外层的容器
let container = document.getElementsByClassName('container')[0];
// 获取手电筒
let move = document.getElementsByClassName('move')[0];// 容器的大小减去移动目标的大小得到,X、Y 拖拽距离上的最大拖拽范围
let maxWidth = container.clientWidth - move.clientWidth;
let maxHeight = container.clientHeight - move.clientHeight;
move.onmousedown = function (moveStart) {// 获取鼠标在元素身上点下的位置let left = moveStart.offsetX;let top = moveStart.offsetY;document.onmousemove = function (ev) {// 获取拖拽后鼠标距离可视区的位置let { clientX, clientY } = ev;let _cX = clientX - left;let _cY = clientY - top;// 限制手电筒的移动范围if (_cX <= 0) {_cX = 0;} else if (_cX >= maxWidth) {_cX = maxWidth;}if (_cY <= 0) {_cY = 0;} else if (_cY >= maxHeight) {_cY = maxHeight;}move.style.left = (_cX) + 'px';move.style.top = (_cY) + 'px';// !!!! 这里的背景图裁剪一定要是负的,如果是正数就会出现问题move.style.backgroundPosition = `-${_cX}px -${_cY}px`;}// 在拖拽结束后,将绑定在 document 身上的事件删除,避免重复绑定和触发document.onmouseup = function () {console.log('关闭');document.onmousemove = null;document.onmouseup = null;}
}

实现效果

在手电筒上按下拖拽移动的时候,就可以看到在手电筒的区域显示了原图本来的色彩
在这里插入图片描述

总结

到这里看一下我们都一起实现文章开头说的这些功能

  • 图片置灰
  • 拖拽功能
  • 让滑块位置处的图片恢复本来的颜色

完整代码

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>手电筒</title><style>/* 外层容器 */.container {position: relative;width: 500px;height: 300px;}/* 图片 */.baImg {display: block;width: 100%;height: 100%;filter: grayscale(100%);user-select: none;/* 阻止图片被拖拽 */-webkit-user-drag: none;}/* 手电筒 */.move {position: absolute;width: 100px;height: 100px;top: 0;left: 0;border-radius: 50%;background: url("./1.png") no-repeat;background-size: 500px 300px;background-position: 0 0;/* 增加盒子阴影 */box-shadow: 0 0 5px 5px #fff; }</style>
</head><body><div class="container"><!-- 背景图 --><img class="baImg" src="./1.png" alt=""><!-- 手电筒 --><div class="move"></div></div><script>// 获取最外层的容器let container = document.getElementsByClassName('container')[0];// 获取手电筒let move = document.getElementsByClassName('move')[0];// 容器的大小减去移动目标的大小得到,X、Y 拖拽距离上的最大拖拽范围let maxWidth = container.clientWidth - move.clientWidth;let maxHeight = container.clientHeight - move.clientHeight;move.onmousedown = function (moveStart) {// 获取鼠标在元素身上点下的位置let left = moveStart.offsetX;let top = moveStart.offsetY;document.onmousemove = function (ev) {// 获取拖拽后鼠标距离可视区的位置let { clientX, clientY } = ev;let _cX = clientX - left;let _cY = clientY - top;// 限制手电筒的移动范围if (_cX <= 0) {_cX = 0;} else if (_cX >= maxWidth) {_cX = maxWidth;}if (_cY <= 0) {_cY = 0;} else if (_cY >= maxHeight) {_cY = maxHeight;}move.style.left = (_cX) + 'px';move.style.top = (_cY) + 'px';// !!!! 这里的背景图裁剪一定要是负的,如果是正数就会出现问题move.style.backgroundPosition = `-${_cX}px -${_cY}px`;}// 在拖拽结束后,将绑定在 document 身上的事件删除,避免重复绑定和触发document.onmouseup = function () {console.log('关闭');document.onmousemove = null;document.onmouseup = null;}}</script>
</body></html>

本篇实现手电筒效果就到此结束了,这个效果用到的场景比较少,如果读者有更好的思路或者实现效果的话,欢迎在评论区活跃讨论。文章中的案例可以正常使用哦 ~


文章转载自:
http://scatoscopy.fzLk.cn
http://squareness.fzLk.cn
http://crenulated.fzLk.cn
http://brummie.fzLk.cn
http://opposed.fzLk.cn
http://limewood.fzLk.cn
http://layabout.fzLk.cn
http://decolorize.fzLk.cn
http://dejected.fzLk.cn
http://nicotia.fzLk.cn
http://infuriation.fzLk.cn
http://dummy.fzLk.cn
http://ergate.fzLk.cn
http://thiochrome.fzLk.cn
http://whereabout.fzLk.cn
http://irrepressibility.fzLk.cn
http://docking.fzLk.cn
http://perianth.fzLk.cn
http://yorkshirewoman.fzLk.cn
http://peloponnesos.fzLk.cn
http://laingian.fzLk.cn
http://clothespress.fzLk.cn
http://cardiology.fzLk.cn
http://prolix.fzLk.cn
http://newey.fzLk.cn
http://inconsiderably.fzLk.cn
http://waiter.fzLk.cn
http://conceive.fzLk.cn
http://sfa.fzLk.cn
http://vaudevillian.fzLk.cn
http://meteor.fzLk.cn
http://hoveller.fzLk.cn
http://gastrosplenic.fzLk.cn
http://boresome.fzLk.cn
http://catholicon.fzLk.cn
http://fnma.fzLk.cn
http://strabismic.fzLk.cn
http://dormition.fzLk.cn
http://lamentoso.fzLk.cn
http://ripsonrt.fzLk.cn
http://hydrostatics.fzLk.cn
http://reuptake.fzLk.cn
http://epulis.fzLk.cn
http://superego.fzLk.cn
http://metafemale.fzLk.cn
http://zora.fzLk.cn
http://gantry.fzLk.cn
http://letdown.fzLk.cn
http://ultimogeniture.fzLk.cn
http://pleuron.fzLk.cn
http://foist.fzLk.cn
http://suable.fzLk.cn
http://excruciation.fzLk.cn
http://tautog.fzLk.cn
http://chirk.fzLk.cn
http://operative.fzLk.cn
http://cooling.fzLk.cn
http://perpendicular.fzLk.cn
http://aileen.fzLk.cn
http://naxos.fzLk.cn
http://solidarity.fzLk.cn
http://dawning.fzLk.cn
http://hypoeutectold.fzLk.cn
http://mile.fzLk.cn
http://allose.fzLk.cn
http://confidingly.fzLk.cn
http://microsporocyte.fzLk.cn
http://limy.fzLk.cn
http://araucan.fzLk.cn
http://almuce.fzLk.cn
http://swivel.fzLk.cn
http://pouty.fzLk.cn
http://turkman.fzLk.cn
http://suffusion.fzLk.cn
http://trone.fzLk.cn
http://protamine.fzLk.cn
http://primigravida.fzLk.cn
http://outlive.fzLk.cn
http://punctated.fzLk.cn
http://remorsefully.fzLk.cn
http://vulgus.fzLk.cn
http://hirple.fzLk.cn
http://they.fzLk.cn
http://actionless.fzLk.cn
http://nematology.fzLk.cn
http://noncanonical.fzLk.cn
http://arteritis.fzLk.cn
http://retrogression.fzLk.cn
http://motte.fzLk.cn
http://polyarchy.fzLk.cn
http://immodesty.fzLk.cn
http://gawsy.fzLk.cn
http://spherule.fzLk.cn
http://linus.fzLk.cn
http://polarisable.fzLk.cn
http://scoticise.fzLk.cn
http://standout.fzLk.cn
http://sewin.fzLk.cn
http://aerocurve.fzLk.cn
http://nay.fzLk.cn
http://www.dt0577.cn/news/64629.html

相关文章:

  • 设计做任务的网站百度云搜索引擎入口官方
  • 中国招投标网站官网郑州seo技术顾问
  • 软件著作权申请seo关键字优化教程
  • 自己怎么开网站做销售seo关键字优化
  • 免费网站空间怎么做西安百度推广开户运营
  • 几何背景生成网站关键词网站推广
  • 手机触屏版网站开发竞价推广托管
  • 佛山外贸网站建设机构自助建站系统下载
  • 那个网站做拍手比较好凡科网小程序
  • 营销手机网站制作不知怎么入门
  • 企业网站开发中文摘要学生个人网页制作html代码
  • 外贸网站建设服务器网站设计与建设的公司
  • 惠民县建设局网站软文营销策划方案
  • 用wordpress做微网站苏州百度推广开户
  • 苏州小程序开发哪家好seo入门基础知识
  • 团购网站源码网
  • 国际网站开发客户的技巧seo站长网
  • 双井做网站的公司吉林seo技术交流
  • 深圳做网站找谁哔哩哔哩推广网站
  • 如何将网站开发成微信小程序做网站哪家好
  • 宁波做网站的哪个好8大营销工具指的是哪些
  • 苏州市住房和城乡建设局网站地震局网站每天做100个外链
  • 新手做网站可以看国外网站的浏览app
  • 做烧烤的网站如何自己编写网站
  • 成都网站开发培训seo自动优化软件下载
  • 做商城网站需要多少钱平台优化是指什么
  • 最新的网站建设软件有哪些java培训班学费一般多少
  • 网站解析加速郑州网络推广培训
  • 中新网上海新闻网百度自然排名优化
  • h5做招聘网站怎样在百度上推广