效果:

弧形菜单,文字按规则变形以及变换透明度

简单的javascript,上手难度:简单

源码:

学习笔记:

text-decoration:

最主要的功能就是给文字加上附着在文字底部,上方,或者中间的线(删除线)。参考:https://www.w3school.com.cn/c...

none

默认。定义标准的文本。

underline

定义文本下的一条线。

overline

定义文本上的一条线。

line-through

定义穿过文本下的一条线。

inherit

规定应该从父元素继承 text-decoration 属性的值。javascript

隐藏超出边界的子元素:

该例子中有13个菜单项,但只显示出12个,由于第1个和第13个超出了父元素的边界,被隐藏了。css

overflow: hidden;

渐入隐藏效果:

第2,3,11,12个虽然没有被隐藏,但看起来很朦胧。这样的效果首先是设置透明度,嗯,nth-child的用法html

.item:nth-child(2), .item:nth-child(3), .item:nth-child(11), .item:nth-child(12) {

opacity: 0.2;

}

而后是邻近顶部和底部的线性渐变,这样看来菜单项彷佛和背景融为一体了java

.top {

top: 0;

background: linear-gradient(to bottom, steelblue 0%, rgba(70, 130, 180, 0) 100%);

}

.bottom {

bottom: 0;

background: linear-gradient(to bottom, rgba(70, 130, 180, 0) 0%, steelblue 100%);

}

按钮触摸渐变:

下面这行代码的效果时,当鼠标放上按钮时,按钮花3秒从白色渐变成黑色,离开时立马从黑色变为白色。jquery

.btn {

color: white;

}

.btn:hover {

color: black;

transition: color 3s;

}

若是咱们想鼠标离开时也是黑色逐渐变为白色怎么办?一样加个transition:git

.btn {

color: white;

transition: color 3s;

}

.btn:hover {

color: black;

transition: color 3s;

}

吐槽一下,这儿的上下按钮是两个特殊符号,见html。win10输入法自带许多特殊符号,够弄出不少好玩的东西了github

˄
˅

因为符号自己很小,因而用scale放大,为了防止用户复制内容时不当心选中它,以及为了防止被用户看出来是个符号,加上一个user-select:none,这样用户就选不中了。app

.btn {

transform: scale(3, 1);

user-select: none;

}

javascript详细解释:

第一步:

初始话一波,把除按钮以外的东西都定义好,就造成了一开始看到的界面ide

const srart_pos = 90.75;

const item_count = 13;

const s = 0.52 * Math.PI / 180; //计算位移角度

var pos = [];

var elem = document.getElementsByClassName('item');

function allocationItems() {

//首先设置第7个元素处于中间最大的位置

var i;

var pp = elem[6].getElementsByTagName('a')[0].getAttribute('data-img');

document.getElementById("pic").style.backgroundImage = "url('" + pp + "')";

document.getElementById("pic").className = "img-box";

//计算其它菜单项的位置

pos[0] = srart_pos;

for (i = 1; i < item_count; i++) {

pos[i] = pos[i - 1] - 0.2;

last_pos = pos[i];

}

for (i = 0; i < item_count + 1; i++) {

elem[i].style.left = 240 + 250 * Math.sin(pos[i]) + 'px';

elem[i].style.top = 240 + 250 * Math.cos(pos[i]) + 'px';

}

}

allocationItems();

注意下面这句,getAtrribute的名字要和html设定的属性值同样,看到data-img了吗?不过这个名字随便取就好了,叫”photo”之类的也能够,只要保证js和html同样就行函数

var pp = elem[6].getElementsByTagName('a')[0].getAttribute('data-img');

Can I use... Support tables for HTML5, CSS3, etc

第二步:

当按下按钮时,执行animation(),传个参数,1为向上,0为向上。如今看看animtaion函数里面有什么。首先是定义一些东西

var $ = {

radius: 250, //圆周半径

speed: 10 // 速度单位

}

var e = elem;

document.getElementById("pic").className = "hide";

console.log(3);

而后执行函数animate()。不过这个执行函数把别的函数当成参数传进去了,注意看。先无论当成参数传的函数是什么,暂时用不上。

animate(function () {

console.log(1);

var i;

for (i = 0; i < item_count; i++) {

e[i].style.left = 240 + $.radius * Math.sin(pos[i]) + 'px';

e[i].style.top = 240 + $.radius * Math.cos(pos[i]) + 'px';

if (flag) {

pos[i] += s;

} else {

pos[i] -= s;

}

} /* callback function */

}, 400, function changeItems() {

console.log(2);

var list = document.getElementById('list');

var ch = flag ? list.firstElementChild : list.lastElementChild

ch.remove();

if (flag) {

list.appendChild(ch);

} else {

list.insertBefore(ch, list.firstChild);

}

allocationItems();

});

而后看看animate()函数的定义:

function animate(draw, duration, callback) {

console.log(4);

var start = performance.now();

requestAnimationFrame(function run(time) {

console.log(5);

// 自启动来(按下按钮)的时差

var timePassed = time - start;

console.log(time, start)

// 不能超过最大持续时间

if (timePassed > duration)

timePassed = duration;

//从新绘制菜单项的位置

draw();

console.log(6);

if (timePassed < duration) {

console.log(7);

requestAnimationFrame(run);

} else

{

console.log(8);

callback();

console.log(9);

}

});

}

先用performance.now()肯定按下按钮的时间,储存在start中。而后用requestAnimationFrame执行run函数。至于run函数是什么,已经在requestAnimationFrame函数中定义好了。

注意requestAnimationFrame调用时会给其中的函数传入DOMHighResTimeStamp参数,该参数与performance.now()的返回值相同,它表示requestAnimationFrame() 开始去执行其中函数的时刻。这就是为何run函数的定义中会有个time参数了,其实就是目前的时刻。

每次执行run函数,都要执行一遍draw函数。draw我单独放了出来,便于理解。仔细一看,这不就是更新菜单项的位置吗?菜单项位置并非一下就从原位置到了指定位置,而是慢慢地移过去的,因此看起来很流畅。注意这儿的$和jquery没有关系,看看前面的定义便可。

function draw() {

console.log(1);

var i;

for (i = 0; i < item_count; i++) {

e[i].style.left = 240 + $.radius * Math.sin(pos[i]) + 'px';

e[i].style.top = 240 + $.radius * Math.cos(pos[i]) + 'px';

if (flag) {

pos[i] += s;

} else {

pos[i] -= s;

}

}

}

返回run函数,若是如今播放时间还没到规定的时间的话,再执行一遍run函数。如此反复下去。若是到了规定时间的话,就执行callback()。更多Callback函数的知识请看https://blog.csdn.net/UnderIc...,我在这儿就很少说了。

但到底执行的函数是什么样子?单独放出来一看,注意按向上的按钮时,flag = 1,不然flag = 0。假如按了向上的按钮,全部菜单项逆时针向上转,这时第一个菜单项须要接着第十三个菜单项后面,不然后面就空了。因而就把第一个菜单项取下来remove(),掉,因而原来的第二到第十三菜单项序号都变小一个,第八个变成了第七个,变成了最大的那个。而后再把取下的第一个当成第十三个接在最后面,又成了新的菜单排列。

按向下的按钮也是同样。

function changeItems() {

console.log(2);

var list = document.getElementById('list');

var ch = flag ? list.firstElementChild : list.lastElementChild

ch.remove();

if (flag) {

list.appendChild(ch);

} else {

list.insertBefore(ch, list.firstChild);

}

allocationItems();

}

html弧形列表效果,好看漂亮的html5网页特效学习笔记(5)_弧形菜单相关推荐

  1. html5猜颜色游戏,好看漂亮的html5网页特效学习笔记(3)_猜猜下一个颜色是什么?...

    效果: 根据给出的两个连续颜色,玩家需要猜出下一个是什么颜色 随机关卡 使用vw,vh,vmin,vmax来屏幕自适应 很难玩 html+css+javascript,但js很短并不难,上手难度:简单 ...

  2. 宝藏又小众的html5网页特效素材网站分享

    因为工作的原因,我会经常使用到素材网站,各个平台的模式不太一样,内容也各有特点.刚开始接触素材网站都是一头雾水,走了很多弯路,一些很简单的操作都花去很长的操作时间.....今天给大家安利html5网页 ...

  3. html弧形列表效果,web前端入门到实战:html5网页特效-弧形菜单

    效果: 弧形菜单,文字按规则变形以及变换透明度 简单的javascript,上手难度:简单 学习笔记: text-decoration: 最主要的功能就是给文字加上附着在文字底部,上方,或者中间的线( ...

  4. HTML5与CSS3学习笔记

    HTML与CSS学习笔记 HTML5 1.标签 简单的网页的基本结构 <html><head><title>我的网页<title/></head& ...

  5. php实现页面雪花效果,JavaScript_使用javascript实现雪花飘落的效果,看了javascript网页特效实例大全 - phpStudy...

    使用javascript实现雪花飘落的效果 看了javascript网页特效实例大全中的图片飘下的效果实例,觉得值得动手学习下. 就把图片改成雪花图,完成一个雪花飘下的效果. 并且,其中有些内容比较陈 ...

  6. html弧形列表效果,JavaScript+html5 canvas绘制的圆弧荡秋千效果完整实例

    本文实例讲述了JavaScript+html5 canvas绘制的圆弧荡秋千效果.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: demo #canvas { margin:50 ...

  7. html弧形列表效果,jQuery效果 弧形弹出菜单

    /p> < 前端开发职描述及岗位: body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, code, form, ...

  8. html5点击效果文字跳转,JS网页特效代码,点击跳出爱心和文字特效

    鼠标左键点击网页会跳出爱心,相信不少站长见过这种JS网页特效,有些点击还会跳出文字.橘子君也是觉得挺好奇的,然后也给网站加了一段时间这种特效,后来由于种种原因的考虑,博主又将该代码删除了.如果你对这种 ...

  9. cocos2d x html5项目,cocos2d-js学习笔记之项目目录

    Paste_Image.png 项目目录结构 目录 介绍 frameworks 包含cocos2d-html5引擎.cocos2d-x引擎和各个平台的项目文件 -cocos2d-html5 cocos ...

  10. html5+CSS+JavaScript学习笔记(小甲鱼)

    第一个程序 <!DOCTYPE html> <html><head><title>第一个程序</title></head> &l ...

最新文章

  1. NeurIPS 2019公布获奖论文!新增杰出新方向奖项,微软华裔研究员斩获经典论文...
  2. 占内存小的qq_手机内存空间告急,这些办法就能轻松搞定!
  3. RequestBody注解
  4. 2016总结 wjwdive
  5. 讲二次搜索树转化为排序的双向链表
  6. 计算机excel表格相关考试视频,1189.5天通过职称计算机考试:Excel 2003中文电子表格(考点视频串讲+全真模拟).pdf...
  7. VC读取PE文件的OEP
  8. 字符串之String类
  9. 2012总结--目录
  10. 锐捷客户端开热点之秘诀
  11. 【西汉文学】之《贾谊·过秦论》
  12. 电脑连接热点无internet访问权限_连接wifi后显示无internet访问权限怎么解决
  13. win10登录时显示PIN码不可用,转到设置重新设置PIN码
  14. oracle otl,使用OTL操作Oracle数据库
  15. Winsock 函数简介
  16. virtualbox E_INVALIDARG (0x80070057) 和 E_FAIL (0x80004005) SessionMachine
  17. 高级筛选条件为系别为计算机或者数学,电子表格中的高级筛选.doc
  18. 生存指南2服务器无响应,生存指南2 游戏中遇到的BUG怎么办 生存指南2BUG汇总
  19. 【论文阅读|浅读】RolX: Structural Role Extraction Mining in Large Graphs
  20. SNS:95 后社交方式新主张

热门文章

  1. 我要看的学习网站——php
  2. ORM定制的几点注意事项
  3. .NET 中的对象序列化
  4. 20200113每日一句
  5. 黑马程序员 Python学习笔记之PyCharm 的初始设置
  6. 深度学习CNN, R-CNN
  7. Atitit Spring事务配置不起作用可能出现的问题: .是否是数据库引擎设置不对造成的【笔者就遇到了这个问题,由于笔者使用的是mysql数据,但是在创建表的时候引擎默认(mysql中引擎默认为
  8. Atitit mybatis 配置 redis 集成 attilax总结 艾提拉总结 1.1. setting name=cacheEnabled v 1 1.2. Mapper文件 1 1.
  9. Atitit 概念还是技术更重要
  10. Atitit 马尔可夫过程(Markov process) hmm隐马尔科夫。 马尔可夫链,的原理attilax总结