boxsnake

boxsnake 查看完整档案

深圳编辑加州大学  |  基因学 编辑一科互联  |  PHP工程师 编辑 www.boxsnake.tk 编辑
编辑

(╯‵□′)╯︵┻━┻

个人动态

boxsnake 回答了问题 · 2018-01-22

解决求助,Sequelize的upsert写法问题

  • fields的类型是Array,表示第一个参数内的部分字段名(例fields['count']的话,upsert只添加/更新count字段)
  • 正确的写法:
model.upsert({
    id: 2,
    name: find.name
    count: 0
})
.then(inserted => { // 此参数表示是添加还是修改,true添加,false修改
    model.increment('count', {
        by: 2,
        where: {id: 2}
    });
});

关注 3 回答 1

boxsnake 赞了问题 · 2017-07-21

vue 如何做音乐播放器中的歌词滚动?

最近在研究 使用 vue 做一个音乐播放器
现在的问题是 想做歌词随音乐滚动 想法不是很明确
我的想法是 :

      格式化 lrc格式的歌词 存入二维数组数组 [time][lyric]
      在audio 的 timeupdate 中比较当前时间和数组time
      控制歌词滚动
         

问题就在 怎么控制歌词滚动

或者有什么好的思路提供给我

关注 3 回答 3

boxsnake 赞了问题 · 2017-07-21

解决IE版本兼容性问题

我的问题并不是什么具体的代码问题,我只是想请教一下关于IE兼容性的知识,最近公司丢给我一个2011年的项目,是个基于B/S的补丁管理项目,我的系统安装的IE版本是IE11,但实际改动这个平台的页面时,却会发生一些IE8,IE7的兼容性问题,比如使用font-awesome时,需要增加IE7兼容的js文件才能使用fa,比如使用getElementsByClassName时,浏览器会直接报不支持这个方法的错。页面的html版本时HTML 4.01,请问有哪位能稍微讲解一下这个原因吗?谢谢了。

关注 3 回答 3

boxsnake 回答了问题 · 2017-07-21

解决IE版本兼容性问题

参见:CanIUse
clipboard.png

IE8以下的是不支持这个方法的,而IE7兼容的JS文件实际的操作就是,用IE7兼容的方法自己实现某些不支持的特性,并将这些自己实现的方法命名的和原方法一致,然后将这种特性写到最上层的原型之中。由于原型链的关系,这样就相当于在IE7下也实现了功能。

比如IE7不支持getElementsByClassName,这个JS通过判断是否有这个方法,如果没有则用自己定义的同名方法(用IE7支持的方式重写的具有相同作用的getElementsByClassName方法),将它注入到原型中去。

这种方法一般被称为Polyfill,实现起来大致是这样

// 由于不知道最上层实现getElementsByClassName方法的类名,暂时称为X
if(!X.prototype.getElementsByClassName) {
    X.prototype.getElementsByClassName = function() {
        // 此处为自己实现的getElementsByClassName方法
    };
}

这样由于IE8以上的自身有这个方法,所以不会进入if判断内,而IE8及以下的版本,由于自身没有实现这个方法,就会进入判断,而判断内的代码正好补充了缺失的getElementsByClassName方法。

关注 3 回答 3

boxsnake 回答了问题 · 2017-07-21

解决echarts数据填写出错

  • jQuery.ajax返回回来的,可能是一个对象(或者数组),也可能是HTML源码(或者是直接输出的内容,为文本形式)

  • 以上情况,首先是根据dataType配置判断的,如果设置了可以识别的dataType,则会尝试将返回结果按照dataType指定的值来识别,但是如果按照dataType转换失败的话,就会以原数据(也就是纯文本)返回

  • 如果没有配置dataType,则会根据传输头,或者猜测数据格式,但是同样的,如果转换失败,就会以元数据返回

  • jQuery.ajax默认解析JSON的方法是JSON.parse(),也就是说,要让它返回数据为数组,也就需要你的数据可以被JSON.parse()解析成数组,否则就是以纯文本返回

  • 但是由于你的这个数组,并不是标准的JSON格式,数组最后多了一个逗号([[ ... ], ..., [ ... ],]),所以JSON.parse()无法解析,所以你返回回来的,是一个String类型的,所以无法使用splitData进行处理。

关注 3 回答 2

boxsnake 回答了问题 · 2017-07-21

解决wordpress这种标签页面是怎么实现的

  • 首先,我看了下第一个的页面,在点击A的时候是跳转链接到/A的,然后点了第二页是跳转到了/A/2

  • 所以,感觉上这个页面是后端取了数据以后,分页完了再输出出来的

  • 另外看到这个路径感觉上是做了伪静态

  • 所以,这些标签应该是存在数据库里的,由后端取出,然后按照网页的样式,将数据填进去

  • 至于分页部分,其实就是获取了数据总条数,然后除以每一页的条数,得到总页数即可,在PHP输出时,用for()循环多次即可

  • 至于标签部分渲染,也是取后端数据然后使用了for遍历到了页面中

  • 至于这些标签在页面中的存储方式,至少有一个字段index,可能的值为A-Z0-9,另外有个name,为标签的值(字段名未必是这样,只是表示有这个逻辑)

  • 至于标签对应的index,没必要实时分析,只需要在添加标签的时候分析出来,然后一起写到数据库中就可以了

关注 4 回答 3

boxsnake 回答了问题 · 2017-07-21

解决CI引入不存在的文件提示404

  • 首先,确定你的本地环境文件名是否区分大小写

  • 如果本地开发环境为Windows或者MacOS的话,一般而言是文件名的大小写问题

  • 其中,libraries目录中的库文件名首字母需要大写,首字母后需要小写,和文件里面类名保持一致

  • 另外,你查看一下服务器上面是不是修改了router.php配置中的$route['404_override'],这个会将不存在的地址强制报错404

  • 另外,需要看一下服务器上的伪静态配置是否有差别

关注 2 回答 2

boxsnake 回答了问题 · 2017-07-21

vue 如何做音乐播放器中的歌词滚动?

  • 如果只是用来做练手的话,可以使用一个几乎没人用的HTML元素<marquee>,通过用下一句开始时间 - 当前句开始时间得到歌词跑完一次所需要的时间,将这个值设置给<marquee>元素,通过不断替换<marquee>元素实现歌词切换,而至于滚动这个元素会自己实现,而且由于设置了循环时间 = 下句开始时间 - 这句开始时间,所以歌词跑完正好是换下一句歌词的时候

  • 如果你是要实现上下滚动的话,用<marquee>就没办法灵活的设置滚动速度了(因为左右滚动完可以直接替换元素实现切换滚动速率,但是上下滚动的话,由于相邻两句速率不一定一样,比如第一句10秒放完,第二句5秒放完,那么,就需要将第1行字的高度,平摊在10秒内滚动完,第二句高度,平摊在5秒内滚动完),所以在这种情况下,建议用类似轮播图的实现思路:

    • 外层是一个歌词框(溢出部分隐藏)

    • 内层是一个包裹框,可以用<ul>实现

    • 然后里面一句歌词对应一个<li>

    • 通过下一句开始时间 - 这句开始时间得到这句运行时间,然后用JS获取当前li元素的高度,将这个高度平均到这段时间内做平滑动画,动画只修改元素的top,建议使用jQuery实现

    • 大致代码(只是写了个实现思路不一定可以运行)
      HTML:

<div class="lyric">
    <ul>
        <li>歌词第一行</li>
        <li>歌词第二行</li>
        ...
    </ul>
</div>

CSS:

.lyric {
    width: 400px;
    height: 500px;
    position: relative;
    overflow: hidden;
}

.lyric ul {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    margin: 0;
    padding: 0;
}

.lyric ul li {
    list-item-style: none;
}

JS:

// 下面示例即为移动一句歌词的demo,这里就用X表示歌词对应的li的jQuery选择器
// 用timeGap表示这句歌词对应的滚动时间
var lyricHeight = X.height();

$('.lyric ul').animate({'top': '-' + lyricHeight + 'px'}, timeGap);
// 直接对ul上边距做-lyricHeight像素的偏移,动画时间为timeGap毫秒

关注 3 回答 3

boxsnake 回答了问题 · 2017-07-21

解决数据库插入数据不填写主键内容

INSERT INTO
    表 (suggestion)
VALUES
    (suggestion值)

即可

  • 表后面跟的是字段

  • 如果不指定字段,会以数据表中字段顺序依次填写

  • 如果指定字段,会和后面值的列表中的值一一对应,id作为主键(假设是有自增),如果不指定会自动自增生成一个唯一的值

关注 5 回答 5

boxsnake 赞了问题 · 2017-07-21

vue transition 能设置延迟delay吗

如果有 那么如何设置?

关注 3 回答 2

认证与成就

  • 获得 470 次点赞
  • 获得 48 枚徽章 获得 1 枚金徽章, 获得 10 枚银徽章, 获得 37 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2017-06-16
个人主页被 3.7k 人浏览