美文网首页
09_JS字符串方法、$封装、无缝滚动、动画、轮播图

09_JS字符串方法、$封装、无缝滚动、动画、轮播图

作者: 对方不想理你并向你抛出一个异常 | 来源:发表于2017-09-10 14:34 被阅读0次

返回前面起第一个字符的位置

indexOf(“字符”);

它是从 前面开始数(从左边开始数), 而且只找第一个, 然后返回改字符的位置, 索引号都是从0开始的。 返回的是个数值。

 var txt = “abcdef”;
 alert(txt.indexOf(“d”))      结果就是   3

如果找不到该字符 返回 -1

返回后面起第一个字符的位置

lastIndexOf(索引字符串)

从后面开始数,返回的索引值还是从前面开始数的

例:

var str = "adsfgh";
alert(str.indexOf("s"));//2
alert(str.lastIndexOf("s"));//2

上面两个结果都是2,但是如果str改为

var str = "adsfghsb";
alert(str.indexOf("s"));//2
alert(str.lastIndexOf("s"));//6

这个时候lastIndexOf返回的就是6了

网址编码

我们知道一个网站自己的网址, 不同页面也有自己id网址, 我们经常会做一些, 把网址送入到后台。 但是后台再处理的不认识,比如换行啊等特殊符号的?

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码
decodeURIComponent() 函数可把字符串作为 URI 组件进行解码

例:

        var url =  "http://www.itast.cn?name=cz";
        var encUrl = encodeURIComponent(url);
        console.dir(encUrl);
        console.dir(decodeURIComponent(encUrl));

结果:

http%3A%2F%2Fwww.itast.cn%3Fname%3Dcz
%E7%BC%96%E8%A7%A3%E7%A0%81.html:10 http://www.itast.cn?name=cz

操作字符串

  • 合并字符串
  • 取字符串

concat()

连接字符串

str1.concat(str2);

var txt1 = "abc";
var txt2 = "123";
console.log(txt1.concat(txt2));// "abc123"; 

slice()

slice(“取字符串的起始位置”, [结束位置]) ;
[] 表示可选的参数

起始位置一定要有,结束位置可以省略

var txt = “abcedf”;
txt.slice(3) ;    从 txt 里面字符的 第 3(索引号)个开始取   结束位置省略, 一直取到最后一个。 

总结:

  • slice(3) 从第3个开始取,一直取到最后
  • slice(3,6) 3:从 第3个开始取,6:取到第6索引号的位置,注意:是从左边的第0个开始数。 但是不包 6 。
  • 起始位置可以是负数 , 如果是负数,则是从 右边往左边开始取。
var txt =”asdf”;
txt.slice(-1) ;// 结果是   f 
  • slice(-1);表示从右边第一个开始到右边最后一个
  • slice(-5,-2);表示从右边第五个开始到右边最后二个,不包括第二个

substr()

substr(起始位置,[取的个数])

同上。不写取的个数, 默认从起始位置一直取到最后 。
取的个数: 是指从起始位置开始,往后面数几个。

 var txt = “abcdefghijk”;
 txt.substr(3,4); //从第3个  (d) 开始 数 4个  defg 
  • substr(-1) ;少用,因为 在IE6、7、8 报错 。 尽量少用
  • 兼容性的写法 :
    str.substr(str.length-1,1); // 兼容的写法

substring()

  • substring 同slice 一样的,但是有一点不同
  • substring(3,6) ,substring 始终会把 小的值作为 起始位置 大的值作为结束位置
    例如: substring(6,3) 实际中 自动变成 substring(3,6);

例:保留两位小数

        var PI = 3.1415926;
        var str = PI+"";
        var index = str.indexOf(".");
        var sub = str.substr(0,index+3);
        console.dir(sub);//3.14
        console.dir(parseFloat(sub));//3.14

例:判断文件格式

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript">
        window.onload = function () {
            var file = document.getElementById("mwfile");
            file.onchange = function () {
                var fileName = file.value;

                var index = fileName.lastIndexOf(".");
                var subfix = fileName.substr(index).toUpperCase();
                if(subfix == ".JPG" || subfix == ".PNG"){
                    this.nextSibling.innerHTML = "格式正确";
                }else{
                    this.nextSibling.innerHTML = "格式错误";
                }
            }
        }
    </script>
</head>
<body>
    <input type="file" id="mwfile"/><span></span>
</body>
</html>

例:初步封装Jquery的$选择器

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style type="text/css">
        div{
            width: 100px;
            height: 100px;
            background-color: pink;
            margin: 5px;
        }
    </style>

</head>
<body>
<div id="demo"></div>
<div></div>
<div class="one"></div>
<div></div>
<div></div>
<div></div>
<script type="text/javascript">
    //封装自己的Class选择器
    function getByClass(className) {
        var arr = [];//用于存放结果的数组
        if (document.getElementsByClassName) {//浏览器支持
            arr = document.getElementsByClassName(className);
        } else {
            var doms = document.getElementsByTagName("*");
            console.dir(doms.length);
            for (var i = 0; i < doms.length; i++) {
                var classArr = doms[i].className.split(" ");//以空格切割
                for(var j=0;j<classArr.length;j++){
                    if(classArr[j] == className){
                        arr.push(doms[i]);
                    }
                }
            }
        }
        return arr;
    }
    function $(str){
        var type = str.charAt(0);
        var flag = str.substr(1);
        switch(type){
            case "#":
                return document.getElementById(flag);
            case ".":
                return getByClass(flag);
            default :
                return document.getElementsByTagName(str);
        }
    }
//    $("div").style.backgroundColor = "pink";
    $("#demo").style.background = "purple";
</script>
</body>
</html>

无缝滚动

原理:首先先复制 两张图片 (第一张和第二张) 放到最后面 (本质上是第 5.6张)
ul 是盒子移动的, 如果ul 的left 值 大于等于 4张图片的宽度,就应该快速复原为0 。

例:循环匀速无缝滚动

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>无缝滚动</title>
    <style type="text/css">
        body,ul,li{
            margin: 0;
            padding: 0;
        }
        ul,li{
            list-style: none;
        }
        .box{
            width: 600px;
            height: 200px;
            margin: 100px auto;
            overflow: hidden;
            position: relative;
        }
        .box ul{
            width: 1800px;
            position: absolute;
        }
        .box ul li{
            float: left;

        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var scroll = document.getElementById("scroll");
            var ul = scroll.children[0];
            var num = 0;
            var timer = null;
            function animatorPlay(){
                num--;
                num = num >= -1200?num:0;
                ul.style.left = num+"px";
            }
            timer = setInterval(animatorPlay,20);
            scroll.onmouseover = function () {//停止动画
                clearInterval(timer);
            }
            scroll.onmouseout = function () {//开启动画
                timer = setInterval(animatorPlay,20);
            }
        }
    </script>
</head>
<body>
    <div class="box" id="scroll">
        <ul>
            <li>![](images/01.jpg)</li>
            <li>![](images/02.jpg)</li>
            <li>![](images/03.jpg)</li>
            <li>![](images/04.jpg)</li>
            <li>![](images/01.jpg)</li>
            <li>![](images/02.jpg)</li>
        </ul>
    </div>
</body>
</html>

动画

  • 匀速动画
    匀速动画,看起来效果太简单。
    等差序列 : 2 4 6 8 10
  • 缓动动画公式:
    一个盒子初始值是0,要走到 400 px 的位置,假如说,初始值 leader:0 ,target:400
    box.style.left = xxxx + “px”

leader = leader + (target - leader ) /10 ;

10表示步长
例:缓动动画,先快后慢

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        .box{
            width: 200px;
            height: 200px;
            background-color: pink;
            margin-top: 100px;
            position: absolute;
            left: 0;
            top: 0;
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var btn = document.getElementsByTagName("button")[0];
            var div = document.getElementById("box");
            var leader = 0;
            var target = 500;
            var timer = null;
            btn.onclick = function () {
                timer = setInterval(function () {
                    if((target-leader)<0.005){
                        leader = target;
                        clearInterval(timer);
                    }
                    leader = leader+(target-leader)/20;
                    div.style.left = leader+"px";
                    console.log(leader);
                },50);
            }
        }
    </script>
</head>
<body>
    <button>开始</button>
    <div class="box" id="box"></div>
</body>
</html>

例:轮播图

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>焦点图</title>
    <style type="text/css">
        body,ol,ul,li{
            margin: 0;
            padding: 0;
        }
        ol,ul,li{
            list-style: none;
        }
        img{
            /*清除图片底部3px的间隙*/
            /*方式一*/
            /*border: 0 none;*/
            /*vertical-align: middle;*/
            /*方式二*/
            display: block;
        }
        .slider{
            width: 490px;
            height: 170px;
            border: 1px solid #999;
            margin: 100px auto;
            padding: 5px;
            position: relative;
        }
        .inner{
            width: 100%;
            height: 100%;
            /*background-color: pink;*/
            overflow: hidden;
            position: relative;
        }
        .inner ul{
            width: 1000%;
            position: absolute;
            left: 0;
            top: 0;
        }
        .inner li{
            float: left;
        }
        .slider ol{
            position: absolute;
            left: 35%;
            bottom: 10px;

        }
        .slider ol li{
            float: left;
            background-color: #666;
            width: 24px;
            height: 24px;
            text-align: center;
            line-height: 24px;
            margin-left: 5px;
            border-radius: 12px;
            color: #fff;
        }
        .slider ol li.current{
            background-color: #eee;
            color: #333;
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            var slider = document.getElementById("slider");
            var ul = slider.children[0].children[0];
            var ol = slider.children[1];
            var olis = ol.children;
            var leader=0,target = 0;
            for(var i = 0;i<olis.length ;i++){
                var oli = olis[i];
                oli.index = i;
                oli.onmouseover = function () {
                    for(var j=0 ; j<olis.length ; j++){
                        olis[j].className = "";
                    }
                    this.className = "current";
                    target = -this.index*490;//目标位置就是用当前索引乘以盒子宽度
                }
            }
            function PhotoAnimation(){
                leader = leader+(target - leader)/20;
                ul.style.left = leader+"px";
            }
            setInterval(PhotoAnimation , 20);
        }
    </script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="inner">
            <ul>
                <li>![](images/01.jpg)</li>
                <li>![](images/02.jpg)</li>
                <li>![](images/03.jpg)</li>
                <li>![](images/04.jpg)</li>
                <li>![](images/05.jpg)</li>
            </ul>
        </div>
        <ol>
            <li class="current">1</li>
            <li>2</li>
            <li>3</li>
            <li>4</li>
            <li>5</li>
        </ol>
    </div>
</body>
</html>

例:左右点击轮播

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style type="text/css">
        body,ul,li{
            margin: 0;
            padding: 0;
        }
        ul,li{
            list-style: none;
        }
        a{
            text-decoration: none;
        }
        img{
            /*清除图片底部3px的间隙*/
            /*方式一*/
            /*border: 0 none;*/
            /*vertical-align: middle;*/
            /*方式二*/
            display: block;
        }
        .slider{
            width: 520px;
            height: 280px;
            border: 1px solid #999;
            margin: 100px auto;
            padding: 5px;
            position: relative;
        }
        .inner{
            width: 100%;
            height: 100%;
            /*background-color: pink;*/
            overflow: hidden;
            position: relative;
        }
        .inner ul{
            width: 1000%;
            position: absolute;
            left: 0;
            top: 0;
        }
        .inner li{
            float: left;
        }
        .slider a{
            position: absolute;
            width: 40px;
            height: 70px;
            font: 500 40px/70px "simsun";
            text-align: center;
            top: 100px;
            color: #999;
        }
        .slider .left{
            left: 0;
        }
        .slider .right{
            right: 0;
        }
        .slider a:hover{
            background-color: rgba(0,0,0,.2);
        }
    </style>
    <script type="text/javascript">
        window.onload = function () {
            function $(id){return document.getElementById(id);}
            var slider = document.getElementById("slider");
            var ul = slider.children[0].children[0];

            var leader = 0,target = 0;
            $("left").onclick = function () {
                target<=-520*4?-520*4:target -= 520;//边界检测
            }
            $("right").onclick = function () {
                target>=0?0:target += 520;//边界检测
            }
            function PhotoAnimation(){
                leader = leader+(target - leader)/20;
                ul.style.left = leader+"px";
            }
            setInterval(PhotoAnimation , 20);
        }
    </script>
</head>
<body>
    <div class="slider" id="slider">
        <div class="inner">
            <ul>
                <li>![](images/1.jpg)</li>
                <li>![](images/2.jpg)</li>
                <li>![](images/3.jpg)</li>
                <li>![](images/4.jpg)</li>
                <li>![](images/5.jpg)</li>
            </ul>
        </div>
        <a href="javascript:;" class="left" id="left"> > </a>
        <a href="javascript:;" class="right" id="right"> < </a>
    </div>
</body>
</html>

相关文章

  • 09_JS字符串方法、$封装、无缝滚动、动画、轮播图

    返回前面起第一个字符的位置 indexOf(“字符”); 它是从 前面开始数(从左边开始数), 而且只找第一个, ...

  • 05_jQuery_无缝滚动轮播效果插件封装

    使用 jQuery 封装一个无缝滚动轮播效果插件。 效果图: 在线预览:jQuery_LKMarqueeSlide...

  • jQuery封装组件

    Tab切换组件 原生js封装预览效果查看源码 jquery 封装预览效果查看源码 无缝滚动的轮播图 预览效果查看源...

  • 无标题文章

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。它们各具特色,各有用处。 1.传统轮播图 第一步...

  • 轮播图

    轮播图分为:传统轮播图、间歇轮播图、呼吸轮播图、无缝滚动轮播图等。 1.传统轮播图 第一步,得到元素 第二步,设置...

  • Slider - 轮播图

    简介: 用react开发的轮播图组件,支持淡入淡出、水平滚动、垂直滚动的无缝轮播效果。可自定义轮播内容。 API ...

  • 2018-11-10排他思想做轮播图

    这个轮播图没包括无缝滚动 html代码 css代码 js代码

  • jdM站首页

    导航变色方法封装 banner轮播图方法封装 倒计时秒杀方法

  • 无缝滚动

    1 概述 无缝滚动效果在网页里特别常见,一般它用来显示一定数量的图片或者与轮播图进行结合,在说无缝滚动实例之前,我...

  • JS实现无缝滚动

    滚动轮播图原理:以本文为例,想要实现视觉上的无缝隙滚动轮播,就需要在第四张图后,再添加第一张和第二张图,因为本文的...

网友评论

      本文标题:09_JS字符串方法、$封装、无缝滚动、动画、轮播图

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