美文网首页
js进阶小知识2

js进阶小知识2

作者: 前端毛毛 | 来源:发表于2018-12-02 23:59 被阅读0次

获取选中内容

   // 1.1 获取选中的文字 兼容
         var selectedText;
            if(window.getSelection){ // 标准模式 获取选中的文字
                selectedText = window.getSelection().toString();
            }else{ // IE 系列
                selectedText = document.selection.createRange().text;
            }

举例:微博分享

window.onload=function () {
        var selectedText;
        $("word").onmouseup=function (event) {
            if(window.getSelection){ // 标准模式 获取选中的文字
                selectedText = window.getSelection().toString();
            }else{ // IE 系列
                selectedText = document.selection.createRange().text;
            }
            $("share_weibo").style.display="block";
            var e=event || window.event;
            $("share_weibo").style.left=e.clientX+"px";
            $("share_weibo").style.top=e.clientY+"px";

        }
        //页面点击时取消选择
        document.onmousedown=function (event) {
            var e=event || window.event;
            var targetId=e.target ? e.target.id :e.srcElement.id;
            if(targetId!="share_weibo"){
                $("share_weibo").style.display = "none";
            }else{
                //链接的路径 微博分享的API接口
                window.location.href = 'http://v.t.sina.com.cn/share/share.php?searchPic=false&title=' + selectedText;
            }
            //清除选择
         window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
        }
    }
</script>

2.基本动画原理 :left=offsetLeft+speed+"px"; 定时器实现累加
封装基本动画动画

//封装基本动画
function move(obj,target,speed) {
    clearInterval( obj.timer);
    var speed=target>obj.offsetLeft ? speed : -speed;
    obj.timer=setInterval(function () {
        obj.style.left=obj.offsetLeft+speed+"px";
        //判断是否超过目标值或少于目标值 可用差值与布长判断 不管大于或小于 使她等于目标值
        if(Math.abs(target-obj.offsetLeft)<Math.abs(speed)){
            clearInterval(obj.timer);
            obj.style.left=target+"px";
        }
    },20)
}

可运用基本动画做一个案例
仿淘宝轮播 原生js

<script>
        window.onload=function () {
            var aLi=$("ul").children;
            var olIndex=0,aLiIndex=0,timer=null;
            //创建元素 初始化
            $("ul").appendChild(aLi[0].cloneNode(true));
            for(var i=0;i<aLi.length-1;i++){
                var li=document.createElement('li');
                $("ol").appendChild(li);
            }
            $("ol").children[0].className="current";

            //添加事件
            var aOl= $("ol").children;
            for(var i=0;i<aOl.length;i++){
                //运用闭包 让里边可以访问外边i
                (function (i) {
                    aOl[i].onmouseover=function () {
                        for(var j=0;j<aOl.length;j++){
                            aOl[j].className="";
                        }
                        this.className="current";
                        move($("ul"),-i*750,35);
                        olIndex=aLiIndex=i;
                    }
                })(i)
            }
            clearInterval(timer);
            timer=setInterval(lunbo,3000);
            //自动轮播的函数
            function lunbo() {
                olIndex++;
                if(olIndex>aOl.length-1){
                    olIndex=0;
                }
                for(var j=0;j<aOl.length;j++){
                    aOl[j].className="";
                }
                aOl[olIndex].className="current";

                aLiIndex++;
                //关键点 当轮播到复制的图片时 left为0 索引为1 
                if(aLiIndex>aLi.length-1){
                    $("ul").style.left=0+"px";
                    aLiIndex=1;
                }
                move($("ul"),- aLiIndex*750,25);
            }
            $("slider").onmouseover=function () {
                clearInterval(timer);
            }
            $("slider").onmouseout=function () {
                timer=setInterval(lunbo,3000);
            }
        }

3.Math常用函数
Math.random() //随机获取0~1随机数
Math.round() //四舍五入取值
Math.ceil() //向上取值
Math.floor() //向下取值
Math.abs() //取正数

4.缓动动画 例如:speed改变 left=offsetLeft+speed+"px" speed=(target-offsetLeft)*缓动系数
封装缓动函数

**
 * 缓动动画
 * @param obj
 * @param json
 * @param fuc
 */

function buffer(obj, json,fuc) {
    // 1.1 清除定时器
    clearInterval(obj.timer);
    // 1.2 设置定时器
    var begin = 0, target = 0, speed = 0;
    obj.timer = setInterval(function () {
        // 1.3.0 旗帜
        var flag = true;
        for(var k in json){
            // 1.3 获取初始值
            begin = parseInt(getStyleAttr(obj, k)) || 0;
            target = parseInt(json[k]);

            // 1.4 求出步长
            speed = (target - begin) * 0.2;

            // 1.5 判断是否向上取整
            speed = (target > begin) ? Math.ceil(speed) : Math.floor(speed);

            // 1.6 动起来
            obj.style[k] = begin + speed + "px";

            // 1.5 判断
            if(begin !== target){
                flag = false;
            }
        }
        // 1.3 清除定时器
        if(flag){
            clearInterval(obj.timer);
            // 判断有没有回调函数
            if(fuc){
                fuc();
            }
        }
    }, 20);

}

举例:缓动动画未封装时 返回顶部 原理:begin=scroll().top target=0;
scrollTo(0,begin)

window.onload=function () {

        //声明变量
        var begin=0,end=0,timer=null;
        clearInterval(timer);
        //监听窗口滚动
        window.onscroll=function () {
            begin=scroll().top;
            begin>0 ? show($("top")) : hide($("top"));
            $("top").onclick=function () {
                timer=setInterval(function () {
                    //欢动动画
                    begin+=(end-begin)*0.2;
                    scrollTo(0,begin);
                    console.log(begin,end);
                    //清除定时器
                    if(parseInt(begin)==end){
                        clearInterval(timer);
                    }
                },20)
            }

        }
    }

5.获取css值 封装函数

  function getStyleAttr(obj, attr) {
        if(obj.currentStyle){ // IE 和 opera
            return obj.currentStyle[attr];
        }else {
            return window.getComputedStyle(obj, null)[attr];
        }
    }

举例:楼层特效 原理:鼠标点击 运动相同位置 scrollTop=索引*client().height 滚动条滚动 左边划到相应楼层原理:当滚动条滚动距离>=当前划到大的内容.offsetTop 设置当前状态

 window.onload=function () {
        //1.获取元素
        var oLis=$("ol").children;
        var uLis=$("ul").children;
        //2.初始化li颜色
        var colorArr = ['red', 'green', 'blue', 'purple', 'yellow'];
        for(var i=0;i<colorArr.length;i++){
            uLis[i].style.backgroundColor=colorArr[i];

        }
        var iClick=false;
        //3.添加点击事件 动画实现
        for(var i=0;i<oLis.length;i++){
            (function (i) {
                var oI=oLis[i];
                oI.onmousedown=function () {
                    iClick=true;
                    for(var j=0;j<oLis.length;j++){
                        oLis[j].className="";
                    }
                    this.className="current";

                    //document.documentElement.scrollTop=通过索引*可视区域的高度
                    buffer(document.documentElement,{scrollTop:i*client().height});
                    iClick=false;
                }
            })(i)
        }
        //4.当滚动条滚动时 左边Li显示当前li
        document.onscroll=function () {
            if(!iClick){
                //获取滚动高度
                var roll=scroll().top;
                for(var i=0;i<uLis.length;i++){
                    if(roll>=uLis[i].offsetTop){
                        for(var j=0;j<oLis.length;j++){
                            oLis[j].className="";
                        }
                        oLis[i].className="current";
                    }
                }
            }
        }
    }

相关文章

  • js进阶小知识2

    获取选中内容 举例:微博分享 2.基本动画原理 :left=offsetLeft+speed+"px"; 定时器实...

  • 【小程序】基础篇

    1. 知识储备 基础:HTML+JS+CSS 进阶:React、Vue 2. 程序结构 2.1 理解微信小程序的架...

  • js进阶小知识1

    1.event事件对象:Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标...

  • Android 程序员搞 web 之 js基础(九)

    Android 程序员搞 Web 之 进阶(八) 一、js基础知识 以及 WebStorm 的相关知识点 js 主...

  • JS进阶知识

    一、事件 JavaScript 创建动态页面。事件是可以被 JavaScript 侦测到的行为。 网页中的每个元素...

  • js小知识2

    一、字符串常用方法 二、数组常用方法 三、Math常用方法 四、JSON 五、i的问题,执行时机 六、作用域 七、...

  • Js小知识2

    js 构造函数 目前最流行的自定义 先说一下构造函数执行过程new 的作用创建一个对象,将函数作用域赋予这个的对象...

  • js2小知识

    一、循环 循环也叫迭代;有四个部分组成: 1:初始化;2:条件;3:语句;4:自增(改变条件); 二、函数 三、操...

  • react学习(2)

    知识点 1:babel.js的作用:ES6=>ES5,jsx=>js2:小案例

  • js小知识点

    js小知识点 整理 js小知识点 (一):获取元素 1:document.getElementById('id名'...

网友评论

      本文标题:js进阶小知识2

      本文链接:https://www.haomeiwen.com/subject/aekdtqtx.html