在线简历

预览
源码

1. 加载动画

这是一个加载动画:通过 setTimeout(fn,s) 实现的正在加载中的错觉
CSS使用到 display:flex;loading动画定位在屏幕中间,整个动画是页面的一个遮罩层

2. 鼠标中间滚动事件

window.onscroll=function(){}

window.scrollY 属性:文档从顶部开始滚动过的像素值
当滚动鼠标中键时,导航栏变化样式:

window.onscroll=function () {
    if (window.scrollY!=0){
        document.getElementById("top-nav-bar").classList.add("gundong");
    }else if (window.scrollY==0){
        document.getElementById("top-nav-bar").classList.remove("gundong");
    }
};

3. 二级菜单

可以通过鼠标进入事件给要显示菜单添加 class 类名的方式显示二级菜单,鼠标离开时移除

let liTags=document.querySelectorAll(".top-nav-bar>nav>ul>li");
for (let i=0;i<liTags.length;i++){
    liTags[i].onmouseenter=function (x) {
        x.currentTarget.classList.add('active'); //原生js添加类名
    };
    liTags[i].onmouseleave=function (x) {
        x.currentTarget.classList.remove('active');
    };
}

4. 页面内点击跳转锚点和缓动效果

通过给 <a> 添加 href='#id' ,再给跳转至标签添加相应 id 实现页面内锚点跳转
另:缓动动画可以使用连续定时器模拟(设置定时器>清理>再设置)

let aTags=document.querySelectorAll(".top-nav-bar>nav>ul>li>a");
for (let i=0;i<aTags.length;i++){
    aTags[i].onclick=function (x) {
        x.preventDefault(); //阻止a标签的默认动作
        let a=x.currentTarget;
        let tiaozhuan=a.getAttribute("href"); //获取当前点击标签“href”属性
        let ele=document.querySelector(tiaozhuan);
        let top=ele.offsetTop; //距离页面最顶端距离
        //window.scrollTo(0,top-70);  //窗口滚到哪

        let currentTop=window.scrollY;
        let targetTop=top;
        let s=Math.abs(targetTop-currentTop);
        /*****在网上找的缓动函数*****/
        function animate(time) {
            requestAnimationFrame(animate);
            TWEEN.update(time);
        }
        requestAnimationFrame(animate);
        var coords = { y: currentTop};
        var tween = new TWEEN.Tween(coords)
            .to({ y: targetTop-70}, (s/100)*100)
            .easing(TWEEN.Easing.Quadratic.InOut)
            .onUpdate(function() {
                window.scrollTo(0,coords.y);
            })
            .start();
        /*******************************/
    }
}

5. 实现滚动至指定位置,下方 <div> 出现

在HTML中给相应 <div> 添加自定义date-x属性作为标记,通过判断相邻两个 <div> 局窗口顶端的距离是否显示下方 <div>

let dateTags=document.querySelectorAll('[date-x]');
let minIndex=0; //从当前位置开始
//判断当前位置距离窗口顶端最近的div
for (let i=0;i<dateTags.length;i++){
     if (Math.abs(dateTags[i].offsetTop-window.scrollY)<Math.abs((dateTags[minIndex].offsetTop-window.scrollY)/2)){
           minIndex=i; 
       }
}
dateTags[minIndex].classList.remove("move");
/******滚动至相应位置时给导航栏中相应标签添加样式********/
let id=dateTags[minIndex].id;
let a=document.querySelector('a[href="#'+id+'"]');
let li=a.parentNode;
let lis=li.parentNode.children;
for (let i=0;i<lis.length;i++){
     lis[i].classList.remove("scrollAct");
}
li.classList.add("scrollAct");

6. 刷新回到顶部

使用到 window.onload 事件

window.onload=function(){
    if(document.body.scrollTop>0){
        window.scrollTo(0,-1);
        document.body.scrollTop=0;
    }
    window.scrollTo(0,-1);
    document.body.scrollTop=0;
    setTimeout(() => window.scrollTo(0,0), 150)
}

7. 点击回到顶部

这里使用到 jQuery 效果 - animate() 方法

$(function () {
    //当点击跳转链接后,回到页面顶部位置
    $("#back-to-top").click(function(){
//判断html标签是否存在该方法
        if ($('html').scrollTop()) {
            $('html').animate({ scrollTop: 0 }, 1000);
            return false;
        }
        $('body').animate({ scrollTop: 0 }, 1000);
        return false;            
    });  
});

8. 介绍卡部分的跟随鼠标位置变化函数

banner.offsetLeft + banner.offsetWidth / 2 div中心到页面左边距
e.pageX 鼠标的位置

var banner = document.querySelector('.user-card');
banner.addEventListener('mousemove', function(e){
    this.style.transition = '';
    var centerX = banner.offsetLeft + banner.offsetWidth / 2,  //div中心点到页面左边距离
        centerY = banner.offsetTop + banner.offsetHeight / 2;

    var deltaX = e.pageX - centerX,
        deltaY = e.pageY - centerY;

    var percentageX = deltaX / centerX,  //向左或向右的 偏差率
        percentageY = deltaY / centerY;
    var deg = 25;  //控制 偏差的 程度
    this.style.transform = 'rotateX(' + percentageY * deg + 'deg)'
        + 'rotateY(' + percentageX * deg + 'deg) translateZ(20px)';
});
banner.addEventListener('mouseleave', function(e){
    this.style.transform = 'rotateX(0) rotateY(0) translateZ(0px)';
    this.style.transition = 'all 0.2s linear';
})

9. 技能圈做法

通过js循环插入n条bar,然后用bar的伪元素显示环


$(document).ready(function() {

  var i = 0;
  $('.circle-chart').each(function() {
    var id = 'chart' + i;
    $(this).attr('id', id);
    drawCircleChart('#' + id);
    i++;
  })
//给每个条添加id
  $('.circle-chart').click(function() {
    var thisId = $(this).attr('id');
    drawCircleChart('#' + thisId);
  })
//画圈函数 按照百分比插入多少个bar
  function drawCircleChart(id) {
    $(id).empty().append("<p>" + $(id).data('percent') + "%</p>");
    addOneBar(id);
  }

  function addOneBar(id) {
    var percent = $(id).data('percent');
    var noOfBars = .36 * percent;
    if ($(id).children().length - 1 < noOfBars) {
      $(id).append('<div class="bar"></div>');
      setTimeout(function() {
        addOneBar(id);
      }, 30);
    }
  }
})

CSS

.circle-chart .bar:nth-child(x) {
  -ms-transform: rotate(xxxdeg);
  -webkit-transform: rotate(xxxdeg);
  transform: rotate(xxxdeg);
}

注意问题:

  • xxx.TagName返回的是大写标签名
  • nodeType 节点类型,用于判断是否为某种类型
    常用的有:
    Node.ELEMENT_NODE 值为1 节点元素 如<p><div>等
    Node.TEXT_NODE 值为3 文本节点
  • div[data-x] 表示含有 data-x 属性的 div
  • 更改样式:使用 JS 实现,通过 JS 给需要添加效果的地方添加类名,并在 CSS 中添加对应样式。注:不一定给本体加,也可以给其父元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,472评论 1 45
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明先生_X自主阅读 15,979评论 3 119
  • 昨天跟一创业者朋友聊天,他单枪匹马的干了好多年,过程中起起伏伏磕磕绊绊的事情没少发生,不过好在现在有了起色。在跟他...
    牧羊少年的时间之旅阅读 587评论 0 51
  • 每月短暂相见 安慰一个月的忍耐与焦灼 水电费、燃气费、物业费…… 以滞纳金为由 拦腰一劫 还是落在了房贷车贷之后 ...
    一蓑烟雨22阅读 123评论 0 7
  • 历时实验的结果同我的预期出入很大,此外,第三阶段的表现也同第一阶段大相径庭,写于1986 年6 月的评判必须返工以...
    Julien_竹先生阅读 440评论 0 15