穿墙效果及注释

2023-10-31 06:20
文章标签 效果 注释 穿墙

本文主要是介绍穿墙效果及注释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

穿墙效果附加注释,附加鼠标进入方向算法

<!doctype html>
<html><head><meta charset="UTF-8"><title>Title</title><style>* {margin: 0;padding: 0;list-style: none;}ul {overflow: hidden;width: 630px;margin: 100px auto;}ul li {float: left;position: relative;width: 200px;height: 200px;background: #ccc;margin: 5px;overflow: hidden;}ul li span {position: absolute;width: 100%;height: 100%;background: rgba(255, 0, 0, 0.3);left: -200px;top: 0;}</style><script>function getStyle(obj, sName) {// 获取元素对象的css属性值兼容ie和其他浏览器return (obj.currentStyle || getComputedStyle(obj, false))[sName];}function move(obj, json, options) {// obj 为元素对象、json为设定最后结果对象、options为设置对象// 给options设定默认值options = options || {};// 设定持续时间options.duration = options.duration || 700;// 设定运动方式options.easing = options.easing || 'ease-out';// 定义空对象var start = {};// 定义差值对象var dis = {};// 遍历设定设定最后结果对象for (var name in json) {// 将设定最后结果对象中的属性值与初始值取差值start[name] = parseFloat(getStyle(obj, name) );dis[name] = json[name] - start[name];}// 下方每30毫秒执行一次运动,这里获取运动总次数var count = Math.floor(options.duration / 30);// 设定运动初始次数var n = 0;// 清空间歇调用,如果以前定义过则清除动画次数
        clearInterval(obj.timer);// 用obj.timer来代替动画次数obj.timer = setInterval(function() {n++;for (var name in json) {switch (options.easing) {case 'linear':var cur = start[name] + dis[name] * n / count;break;case 'ease-in':var a = n / count;var cur = start[name] + dis[name] * Math.pow(a, 3);break;// 次数默认使用ease-outcase 'ease-out':var a = 1 - n / count;// cur为每次运动后的元素的落脚位置var cur = start[name] + dis[name] * (1 - Math.pow(a, 3));break;}if (name == 'opacity') {obj.style.opacity = cur;obj.style.filter = 'alpha(opacity:' + cur * 100 + ')';} else {obj.style[name] = cur + 'px';}}// 如果运动完成,则清除运动(obj.timer)if (n == count) {// 清除动画次数
                clearInterval(obj.timer);// 回调函数options.complete && options.complete();}}, 30);}function a2d(n) {// n 为弧度 ;弧度转化为角度return n * 180 / Math.PI;}function hoverDir(ev, obj) {// 领边长度var a = ev.clientX - obj.offsetLeft - obj.offsetWidth / 2;// 对边长度var b = obj.offsetTop + obj.offsetHeight / 2 - ev.clientY;// 通过角度来获得鼠标进入的方向;0为左侧、 1为下 、2为右、 3为上// Math.atan2(b, a)为获取弧度公式// a2d(n)为获取角度公式return Math.round((a2d(Math.atan2(b, a)) + 180) / 90) % 4;}function through(obj) {var oS = obj.children[0]; //这个是li里面的span// 鼠标进入的时候obj.onmouseenter = function(ev) {// 如果不知道ev是啥  就打印出来看看
            console.log(ev)// 兼容ie浏览器var oEvent = ev || event;// obj为li,将oEvent和 li 作为参数,dir为返回值代表着鼠标的进入方向var dir = hoverDir(oEvent, obj);switch (dir) {case 0://左,oS为li中的 spanoS.style.left = '-200px';oS.style.top = 0;break;case 1://oS.style.left = 0;oS.style.top = '200px';break;case 2://oS.style.left = '200px';oS.style.top = 0;break;case 3://oS.style.left = 0;oS.style.top = '-200px';break;}//oS是li里面的span,设置运动  // move(obj, json, options) obj = oS 、 json = { left: 0, top: 0 }、options取默认值,并且没有回调函数move(oS, { left: 0, top: 0 });};// 鼠标离开时obj.onmouseleave = function(ev) {var oEvent = ev || event;var dir = hoverDir(oEvent, obj);switch (dir) {case 0:// move(obj, json, options) obj = oS 、 json = { left: -200, top: 0 }、options取默认值,并且没有回调函数move(oS, { left: -200, top: 0 });break;case 1:move(oS, { left: 0, top: 200 });break;case 2:move(oS, { left: 200, top: 0 });break;case 3:move(oS, { left: 0, top: -200 });break;}};}window.onload = function() {var aLi = document.getElementsByTagName('li');for (var i = 0; i < aLi.length; i++) {through(aLi[i]);}};</script>
</head><body><ul><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li><li><span></span></li></ul>
</body></html>

 

转载于:https://www.cnblogs.com/hss-blog/p/9040431.html

这篇关于穿墙效果及注释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/313416

相关文章

idea中创建新类时自动添加注释的实现

《idea中创建新类时自动添加注释的实现》在每次使用idea创建一个新类时,过了一段时间发现看不懂这个类是用来干嘛的,为了解决这个问题,我们可以设置在创建一个新类时自动添加注释,帮助我们理解这个类的用... 目录前言:详细操作:步骤一:点击上方的 文件(File),点击&nbmyHIgsp;设置(Setti

Python中的输入输出与注释教程

《Python中的输入输出与注释教程》:本文主要介绍Python中的输入输出与注释教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、print 输出功能1. 基础用法2. 多参数输出3. 格式化输出4. 换行控制二、input 输入功能1. 基础用法2. 类

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Rust中的注释使用解读

《Rust中的注释使用解读》本文介绍了Rust中的行注释、块注释和文档注释的使用方法,通过示例展示了如何在实际代码中应用这些注释,以提高代码的可读性和可维护性... 目录Rust 中的注释使用指南1. 行注释示例:行注释2. 块注释示例:块注释3. 文档注释示例:文档注释4. 综合示例总结Rust 中的注释

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

基于Python实现PDF动画翻页效果的阅读器

《基于Python实现PDF动画翻页效果的阅读器》在这篇博客中,我们将深入分析一个基于wxPython实现的PDF阅读器程序,该程序支持加载PDF文件并显示页面内容,同时支持页面切换动画效果,文中有详... 目录全部代码代码结构初始化 UI 界面加载 PDF 文件显示 PDF 页面页面切换动画运行效果总结主

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

使用Python实现生命之轮Wheel of life效果

《使用Python实现生命之轮Wheeloflife效果》生命之轮Wheeloflife这一概念最初由SuccessMotivation®Institute,Inc.的创始人PaulJ.Meyer... 最近看一个生命之轮的视频,让我们珍惜时间,因为一生是有限的。使用python创建生命倒计时图表,珍惜时间

防近视护眼台灯什么牌子好?五款防近视效果好的护眼台灯推荐

在家里,灯具是属于离不开的家具,每个大大小小的地方都需要的照亮,所以一盏好灯是必不可少的,每个发挥着作用。而护眼台灯就起了一个保护眼睛,预防近视的作用。可以保护我们在学习,阅读的时候提供一个合适的光线环境,保护我们的眼睛。防近视护眼台灯什么牌子好?那我们怎么选择一个优秀的护眼台灯也是很重要,才能起到最大的护眼效果。下面五款防近视效果好的护眼台灯推荐: 一:六个推荐防近视效果好的护眼台灯的

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode