穿墙效果及注释

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

相关文章

前端原生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

【Godot4.3】多边形的斜线填充效果基础实现

概述 图案(Pattern)填充是一个非常常见的效果。其中又以斜线填充最为简单。本篇就探讨在Godot4.3中如何使用Geometry2D和CanvasItem的绘图函数实现斜线填充效果。 基础思路 Geometry2D类提供了多边形和多边形以及多边形与折线的布尔运算。按照自然的思路,多边形的斜线填充应该属于“多边形与折线的布尔运算”范畴。 第一个问题是如何获得斜线,这条斜线应该满足什么样

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

UniApp实现漂亮的音乐歌词滚动播放效果

在现代的音乐播放应用中,歌词的展示和滚动播放已经成为了一个非常常见的功能。今天,我们将通过UniApp来实现一个漂亮的歌词滚动播放功能。我们将使用UniApp提供的组件和API来完成这个任务。 页面结构 在页面的模板部分,我们需要创建一个音频播放器和歌词展示区域。使用<scroll-view>组件来实现歌词的滚动效果。 <template><view class="audio-co