• 初见
  • 归档
    • 作品
    • 分享
    • 杂谈
    • 未名
  • 时光
    • 瞬间
    • 追番
  • 水记
  • 留言
  • 收藏
  • 关于
  • 说明
aniBullet
  • 初见
  • 归档
    • 作品
    • 分享
    • 杂谈
    • 未名
  • 时光
    • 瞬间
    • 追番
  • 水记
  • 留言
  • 收藏
  • 关于
  • 说明
搜索
随机换张背景
avatar
登录
header_user_avatar
登录

BULLET.S

疯狂造句中......
See More

TECH OTAKUS SAVE THE WORLD

    \r\n \r\n ","
  • \r\n \r\n
  • \r\n ","
  • \r\n \r\n
  • \r\n ","
  • \r\n \r\n
  • \r\n ","
  • \r\n \r\n
  • \r\n "].map(html => { let temp = document.createElement("div"); temp.innerHTML = html.trim(); return temp.firstChild; }); // 取得所有社交图标 let sliderWidth, a, currentIndex = 0; const itemWidth = 35; // 单个图标宽度 const gap = 10; // 图标间距 const itemTotalWidth = itemWidth + gap; // 图标与间距的总宽度 let direction = "right"; // 更新视图,显示 items[currentIndex] 到 items[currentIndex + a] function updateSlider() { slider.innerHTML = ""; // 清空现有 li sliderWidth = sliderWrapper.clientWidth; a = Math.floor((sliderWidth - 35) / itemTotalWidth); // 计算 a a = Math.max(1, Math.min(a, items.length)); // a 至少为 1 且不超过总图标数 // 只添加 currentIndex 开始的 a 个元素 for (let i = currentIndex; i < currentIndex + a && i < items.length; i++) { let li = items[i]; // 获取现有的图标 li.classList.remove("fade-in-left", "fade-in-right"); // 先移除可能存在的动画类 // 根据方向应用动画 if (direction === "left") { li.classList.add("fade-in-left"); } else { li.classList.add("fade-in-right"); } slider.appendChild(li); } } function checkSliderButtonsVisibility() { if (a >= items.length) { // 如果一次能显示的图标数量大于等于总数量,隐藏按钮 sliderContainer.classList.add('enough-space'); sliderContainer.classList.remove('not-enough-space'); } else { // 需要滚动时显示按钮 sliderContainer.classList.remove('enough-space'); sliderContainer.classList.add('not-enough-space'); } } // 绑定 next 按钮 nextBtn.addEventListener("click", () => { if (currentIndex + a < items.length) { currentIndex += a; } else { currentIndex = 0; // 如果已经在最后,则跳转到首个元素 } direction = "right"; updateSlider(); }); // 绑定 prev 按钮 prevBtn.addEventListener("click", () => { if (currentIndex - a >= 0) { currentIndex -= a; } else { /** * 求最后一组首个元素的索引,计算方式为 起始索引=⌊(元素总量−1)/组容量⌋×组容量 * 使用位运算取整更快,有下面三种方法: * 1、按位或,即 (((items.length - 1) / a) | 0) * a * 2、双按位非,即 (~~((items.length - 1) / a)) * a * 3、无符号右移,即 (((items.length - 1) / a) >> 0) * a * 但以上方法仅适用于非负数,虽然在此处需取整的数值符合条件,但 Math.floor 方法最安全,特此说明,请勿修改 */ currentIndex = Math.floor((items.length - 1) / a) * a; // 如果已经在首个,则跳转到最后一组的首个元素 } direction = "left"; updateSlider(); }); // 窗口大小变化时,重新计算 a 并更新 window.addEventListener("resize", () => { // 重新检查按钮的可见性 checkSliderButtonsVisibility(); // 直接滑动到最前面 currentIndex = 0; updateSlider(); }); // 延迟执行,确保 CSS 计算完成 requestAnimationFrame(() => { updateSlider(); checkSliderButtonsVisibility(); }); });

    归档

    3ds max demo maxscript switch WordPress 下载 任天堂 作品 动态头像 动物之森 动画 动画工具 哔哩哔哩 建站 心得 测试 游戏 脚本 黑科技

    loading_svg

    Copyright © 2020 by Bullet.S

    Theme Sakurairo by Fuukei