13 changed files with 1095 additions and 1568 deletions
-
4.env.development
-
1package.json
-
157src/api/library.js
-
322src/assets/js/tagcloud-2.2.js
-
460src/assets/js/tagscloud.js
-
12src/assets/styles/font-some.css
-
98src/assets/styles/index.scss
-
10src/utils/request.js
-
207src/views/index.vue
-
316src/views/map/index.vue
-
648src/views/pageOne/data.json
-
422src/views/pageOne/index.vue
-
6vue.config.js
@ -1,322 +0,0 @@ |
|||
/* |
|||
* 3d标签云 |
|||
* 功能:鼠标移入标签,当前标签静止放大 |
|||
* 说明:radius 控制滚动区域(横椭圆、纵椭圆、正圆) |
|||
* 版本:2.2 |
|||
* */ |
|||
|
|||
window.tagCloud = (function(win, doc) { |
|||
// 判断对象
|
|||
function isObject(obj) { |
|||
return Object.prototype.toString.call(obj) === '[object Object]' |
|||
} |
|||
|
|||
// 构造函数
|
|||
function TagCloud(options) { |
|||
var self = this |
|||
self.config = TagCloud._getConfig(options) |
|||
self.box = self.config.element // 组件元素
|
|||
self.fontsize = self.config.fontsize // 平均字体大小
|
|||
|
|||
if (Number.isInteger(self.config.radius)) { |
|||
self._radiusX = self._radiusY = self.config.radius |
|||
} else if (self.config.radius instanceof Array) { |
|||
if (self.config.radius.length === 1) { |
|||
self._radiusX = self._radiusY = self.config.radius[0] |
|||
} else { |
|||
self._radiusX = self.config.radius[0] |
|||
self._radiusY = self.config.radius[1] |
|||
} |
|||
} |
|||
|
|||
self.radius = self._radiusX // 滚动半径
|
|||
|
|||
_ratio = Math.round(self._radiusX * 10 / self._radiusY) / 10 // 滚动区域比例,保留一位小数
|
|||
if (_ratio < 1) { // 焦点在Y轴的椭圆
|
|||
self.ratioX = _ratio |
|||
self.ratioY = 1 |
|||
self.radius = self._radiusY // 滚动半径,选择长半径
|
|||
} else if (_ratio > 1) { // 焦点在X轴的椭圆
|
|||
self.ratioX = 1 |
|||
self.ratioY = _ratio |
|||
} else { |
|||
self.ratioX = self.ratioY = 1 // 正圆
|
|||
} |
|||
|
|||
self.depth = 2 * self.radius // 滚动深度
|
|||
self.size = 2 * self.radius // 随鼠标滚动变速作用区域
|
|||
self.mspeed = TagCloud._getMsSpeed(self.config.mspeed) |
|||
self.ispeed = TagCloud._getIsSpeed(self.config.ispeed) |
|||
self.items = self._getItems() |
|||
|
|||
self.direction = self.config.direction // 初始滚动方向
|
|||
self.keep = self.config.keep // 鼠标移出后是否保持之前滚动
|
|||
|
|||
// 初始化
|
|||
self.active = false // 是否为激活状态
|
|||
self.lasta = 1 |
|||
self.lastb = 1 |
|||
self.mouseX0 = self.ispeed * Math.sin(self.direction * Math.PI / 180) // 鼠标与滚动圆心x轴初始距离
|
|||
self.mouseY0 = -self.ispeed * Math.cos(self.direction * Math.PI / 180) // 鼠标与滚动圆心y轴初始距离
|
|||
self.mouseX = self.mouseX0 // 鼠标与滚动圆心x轴距离
|
|||
self.mouseY = self.mouseY0 // 鼠标与滚动圆心y轴距离
|
|||
self.index = -1 |
|||
|
|||
// 鼠标移入
|
|||
TagCloud._on(self.box, 'mouseover', function() { |
|||
self.active = true |
|||
}) |
|||
// 鼠标移出
|
|||
TagCloud._on(self.box, 'mouseout', function() { |
|||
self.active = false |
|||
}) |
|||
|
|||
// 鼠标在内移动
|
|||
TagCloud._on(self.keep ? win : self.box, 'mousemove', function(ev) { |
|||
var oEvent = win.event || ev |
|||
var boxPosition = self.box.getBoundingClientRect() |
|||
self.mouseX = (oEvent.clientX - (boxPosition.left + self.box.offsetWidth / 2)) / 5 |
|||
self.mouseY = (oEvent.clientY - (boxPosition.top + self.box.offsetHeight / 2)) / 5 |
|||
}) |
|||
|
|||
for (var j = 0, len = self.items.length; j < len; j++) { |
|||
self.items[j].element.index = j |
|||
// 鼠标移出子元素,当前元素静止放大
|
|||
self.items[j].element.onmouseover = function() { |
|||
self.index = this.index |
|||
} |
|||
// 鼠标移出子元素,当前元素继续滚动
|
|||
self.items[j].element.onmouseout = function() { |
|||
self.index = -1 |
|||
} |
|||
} |
|||
|
|||
// 定时更新
|
|||
TagCloud.boxs.push(self.box) |
|||
self.update(self) // 初始更新
|
|||
self.box.style.visibility = 'visible' |
|||
self.box.style.position = 'relative' |
|||
for (var j = 0, len = self.items.length; j < len; j++) { |
|||
self.items[j].element.style.position = 'absolute' |
|||
self.items[j].element.style.zIndex = j + 1 |
|||
} |
|||
self.up = setInterval(function() { |
|||
self.update(self) |
|||
}, 30) |
|||
} |
|||
|
|||
// 实例
|
|||
TagCloud.boxs = [] // 实例元素数组
|
|||
// 静态方法们
|
|||
TagCloud._set = function(element) { |
|||
if (TagCloud.boxs.indexOf(element) === -1) { // ie8不支持数组的indexOf方法,所以自定义indexOf
|
|||
return true |
|||
} |
|||
} |
|||
|
|||
// 添加数组IndexOf方法
|
|||
if (!Array.prototype.indexOf) { |
|||
// Array.prototype.indexOf = function (elt /*, from*/) {
|
|||
Array.prototype.indexOf = function(elt) { |
|||
var len = this.length >>> 0 |
|||
var from = Number(arguments[1]) || 0 |
|||
from = (from < 0) |
|||
? Math.ceil(from) |
|||
: Math.floor(from) |
|||
if (from < 0) { from += len } |
|||
|
|||
for (; from < len; from++) { |
|||
if (from in this && this[from] === elt) { return from } |
|||
} |
|||
return -1 |
|||
} |
|||
} |
|||
|
|||
TagCloud._getConfig = function(config) { |
|||
var defaultConfig = { // 默认值
|
|||
fontsize: 16, // 基本字体大小, 单位px
|
|||
radius: 60, // 滚动纵轴半径, 默认60, 单位px,取值60,[60],[60, 60]
|
|||
mspeed: 'normal', // 滚动最大速度, 取值: slow, normal(默认), fast
|
|||
ispeed: 'normal', // 滚动初速度, 取值: slow, normal(默认), fast
|
|||
direction: 135, // 初始滚动方向, 取值角度(顺时针360): 0对应top, 90对应left, 135对应right-bottom(默认)...
|
|||
keep: true, // 鼠标移出组件后是否继续随鼠标滚动, 取值: false, true(默认) 对应 减速至初速度滚动, 随鼠标滚动
|
|||
multicolour: true // 是否为彩色字体,颜色随机,取值:true(默认),false
|
|||
} |
|||
|
|||
if (isObject(config)) { |
|||
for (var i in config) { |
|||
if (config.hasOwnProperty(i)) { // hasOwnProperty()用来判断一个属性是定义在对象本身而不是继承自原型链
|
|||
defaultConfig[i] = config[i] // 用户配置
|
|||
} |
|||
} |
|||
} |
|||
|
|||
return defaultConfig// 配置 Merge
|
|||
} |
|||
|
|||
TagCloud._getMsSpeed = function(mspeed) { // 滚动最大速度
|
|||
var speedMap = { |
|||
slow: 1.5, |
|||
normal: 3, |
|||
fast: 5 |
|||
} |
|||
return speedMap[mspeed] || 3 |
|||
} |
|||
TagCloud._getIsSpeed = function(ispeed) { // 滚动初速度
|
|||
var speedMap = { |
|||
slow: 10, |
|||
normal: 25, |
|||
fast: 50 |
|||
} |
|||
return speedMap[ispeed] || 25 |
|||
} |
|||
TagCloud._getSc = function(a, b) { |
|||
var l = Math.PI / 180 |
|||
// 数组顺序0,1,2,3表示asin,acos,bsin,bcos
|
|||
return [ |
|||
Math.sin(a * l), |
|||
Math.cos(a * l), |
|||
Math.sin(b * l), |
|||
Math.cos(b * l) |
|||
] |
|||
} |
|||
|
|||
TagCloud._on = function(ele, eve, handler, cap) { |
|||
if (ele.addEventListener) { |
|||
ele.addEventListener(eve, handler, cap) |
|||
} else if (ele.attachEvent) { |
|||
ele.attachEvent('on' + eve, handler) |
|||
} else { |
|||
ele['on' + eve] = handler |
|||
} |
|||
} |
|||
|
|||
// 原型方法
|
|||
TagCloud.prototype = { |
|||
constructor: TagCloud, // 反向引用构造器
|
|||
|
|||
update: function() { |
|||
var self = this; var a; var b |
|||
|
|||
if (!self.active && !self.keep) { |
|||
self.mouseX = Math.abs(self.mouseX - self.mouseX0) < 1 ? self.mouseX0 : (self.mouseX + self.mouseX0) / 2 // 重置鼠标与滚动圆心x轴距离
|
|||
self.mouseY = Math.abs(self.mouseY - self.mouseY0) < 1 ? self.mouseY0 : (self.mouseY + self.mouseY0) / 2 // 重置鼠标与滚动圆心y轴距离
|
|||
} |
|||
|
|||
a = -(Math.min(Math.max(-self.mouseY, -self.size), self.size) * 2 / self.radius) * self.mspeed |
|||
b = (Math.min(Math.max(-self.mouseX, -self.size), self.size) * 2 / self.radius) * self.mspeed |
|||
|
|||
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) { return } |
|||
|
|||
self.lasta = a |
|||
self.lastb = b |
|||
|
|||
var sc = TagCloud._getSc(a, b) |
|||
|
|||
for (var j = 0, len = self.items.length; j < len; j++) { |
|||
var rx1 = self.items[j].x |
|||
var ry1 = self.items[j].y * sc[1] + self.items[j].z * (-sc[0]) |
|||
var rz1 = self.items[j].y * sc[0] + self.items[j].z * sc[1] |
|||
|
|||
var rx2 = rx1 * sc[3] + rz1 * sc[2] |
|||
var ry2 = ry1 |
|||
var rz2 = rz1 * sc[3] - rx1 * sc[2] |
|||
|
|||
if (self.index == j) { |
|||
self.items[j].scale = 1 // 取值范围0.6 ~ 3
|
|||
self.items[j].fontsize = 18 |
|||
self.items[j].alpha = 1 |
|||
self.items[j].element.style.zIndex = 99 |
|||
} else { |
|||
var per = self.depth / (self.depth + rz2) |
|||
self.items[j].x = rx2 |
|||
self.items[j].y = ry2 |
|||
self.items[j].z = rz2 |
|||
|
|||
self.items[j].scale = per // 取值范围0.6 ~ 3
|
|||
self.items[j].fontsize = Math.ceil(per * 2) + self.fontsize - 6 |
|||
self.items[j].alpha = 1.5 * per - 0.5 |
|||
self.items[j].element.style.zIndex = Math.ceil(per * 10 - 5) |
|||
} |
|||
self.items[j].element.style.fontSize = self.items[j].fontsize + 'px' |
|||
self.items[j].element.style.left = self.items[j].x * self.ratioX + (self.box.offsetWidth - self.items[j].offsetWidth) / 2 + 'px' |
|||
self.items[j].element.style.top = self.items[j].y / self.ratioY + (self.box.offsetHeight - self.items[j].offsetHeight) / 2 + 'px' |
|||
self.items[j].element.style.filter = 'alpha(opacity=' + 100 * self.items[j].alpha + ')' |
|||
self.items[j].element.style.opacity = self.items[j].alpha |
|||
} |
|||
}, |
|||
|
|||
_getItems: function() { |
|||
var self = this |
|||
var items = [] |
|||
var element = self.box.children // children 全部是Element
|
|||
var length = element.length |
|||
var item |
|||
|
|||
for (var i = 0; i < length; i++) { |
|||
item = {} |
|||
item.angle = {} |
|||
item.angle.phi = Math.acos(-1 + (2 * i + 1) / length) |
|||
item.angle.theta = Math.sqrt((length + 1) * Math.PI) * item.angle.phi |
|||
item.element = element[i] |
|||
item.offsetWidth = item.element.offsetWidth |
|||
item.offsetHeight = item.element.offsetHeight |
|||
item.x = self.radius / 2 * 1.5 * Math.cos(item.angle.theta) * Math.sin(item.angle.phi) |
|||
item.y = self.radius / 2 * 1.5 * Math.sin(item.angle.theta) * Math.sin(item.angle.phi) |
|||
item.z = self.radius / 2 * 1.5 * Math.cos(item.angle.phi) |
|||
item.element.style.left = item.x * self.ratioX + (self.box.offsetWidth - item.offsetWidth) / 2 + 'px' |
|||
item.element.style.top = item.y / self.ratioY + (self.box.offsetHeight - item.offsetHeight) / 2 + 'px' |
|||
if (self.config.multicolour) { // 初始化文字颜色为彩色
|
|||
_color = self._randomNumBoth(0, 360) // 定义色相 (0 到 360) - 0 (或 360) 红,120绿,180青,240蓝,300紫
|
|||
_light = self._randomNumBoth(30, 60) // 定义亮度 0% 为暗, 50% 为普通, 100% 为白
|
|||
item.element.style.color = 'hsl(' + _color + ', 100%, ' + _light + '%)' // 中间值为饱和度; 0%灰色,100%全色
|
|||
// item.element.style.color = 'rgb(' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ',' + parseInt(Math.random() * 255) + ')';
|
|||
} |
|||
items.push(item) |
|||
} |
|||
return items // 单元素数组
|
|||
}, |
|||
|
|||
// 取随机值,Min ≤ num ≤ Max
|
|||
_randomNumBoth: function(Min, Max) { |
|||
var Range = Max - Min |
|||
var Rand = Math.random() |
|||
var num = Min + Math.round(Rand * Range) // 四舍五入
|
|||
return num |
|||
} |
|||
} |
|||
|
|||
if (!doc.querySelectorAll) { // ie7不支持querySelectorAll,所以要重新定义
|
|||
doc.querySelectorAll = function(selectors) { |
|||
var style = doc.createElement('style'); var elements = []; var element |
|||
doc.documentElement.firstChild.appendChild(style) |
|||
doc._qsa = [] |
|||
|
|||
style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}' |
|||
window.scrollBy(0, 0) |
|||
style.parentNode.removeChild(style) |
|||
|
|||
while (doc._qsa.length) { |
|||
element = doc._qsa.shift() |
|||
element.style.removeAttribute('x-qsa') |
|||
elements.push(element) |
|||
} |
|||
doc._qsa = null |
|||
return elements |
|||
} |
|||
} |
|||
|
|||
return function(options) { // factory
|
|||
options = options || {} // 短路语法
|
|||
var selector = options.selector || '.tagcloud' // 默认选择class为tagcloud的元素
|
|||
var elements = doc.querySelectorAll(selector) |
|||
var instance = [] |
|||
for (var index = 0, len = elements.length; index < len; index++) { |
|||
options.element = elements[index] |
|||
if (TagCloud._set(options.element)) { |
|||
instance.push(new TagCloud(options)) |
|||
} |
|||
} |
|||
return instance |
|||
} |
|||
})(window, document) |
|||
@ -1,150 +1,336 @@ |
|||
// JavaScript Document
|
|||
|
|||
var radius = 160 |
|||
var d = 200 |
|||
var dtr = Math.PI / 180 |
|||
var mcList = [] |
|||
var lasta = 1 |
|||
var lastb = 1 |
|||
var distr = true |
|||
var tspeed = 4 |
|||
var size = 200 |
|||
var mouseX = 0 |
|||
var mouseY = 20 |
|||
var howElliptical = 1 |
|||
var aA = null |
|||
var oDiv = null |
|||
window.onload = function() { |
|||
var i = 0 |
|||
var oTag = null |
|||
oDiv = document.getElementById('tagscloud') |
|||
aA = oDiv.getElementsByTagName('a') |
|||
for (i = 0; i < aA.length; i++) { |
|||
oTag = {} |
|||
aA[i].onmouseover = (function(obj) { |
|||
return function() { |
|||
obj.on = true |
|||
this.style.zIndex = 9999 |
|||
this.style.color = '#fff' |
|||
this.style.padding = '5px 5px' |
|||
this.style.filter = 'alpha(opacity=100)' |
|||
this.style.opacity = 1 |
|||
} |
|||
})(oTag) |
|||
aA[i].onmouseout = (function(obj) { |
|||
return function() { |
|||
obj.on = false |
|||
this.style.zIndex = obj.zIndex |
|||
this.style.color = '#fff' |
|||
this.style.padding = '5px' |
|||
this.style.filter = 'alpha(opacity=' + 100 * obj.alpha + ')' |
|||
this.style.opacity = obj.alpha |
|||
this.style.zIndex = obj.zIndex |
|||
} |
|||
})(oTag) |
|||
oTag.offsetWidth = aA[i].offsetWidth |
|||
oTag.offsetHeight = aA[i].offsetHeight |
|||
mcList.push(oTag) |
|||
/** |
|||
* TagCloud.js (c) 2016-2019 @ Cong Min |
|||
* MIT License - https://github.com/cong-min/TagCloud
|
|||
*/ |
|||
|
|||
class TagCloud { |
|||
/* constructor */ |
|||
constructor(container = document.body, texts, options) { |
|||
const self = this |
|||
if (!container || container.nodeType !== 1) return new Error('Incorrect element type') |
|||
|
|||
// params
|
|||
self.$container = container |
|||
self.texts = texts || [] |
|||
self.config = { ...TagCloud._defaultConfig, ...options || {}} |
|||
|
|||
// calculate config
|
|||
self.radius = self.config.radius // rolling radius
|
|||
self.depth = 2 * self.radius // rolling depth
|
|||
self.size = 1.5 * self.radius // rolling area size with mouse
|
|||
self.maxSpeed = TagCloud._getMaxSpeed(self.config.maxSpeed) // rolling max speed
|
|||
self.initSpeed = TagCloud._getInitSpeed(self.config.initSpeed) // rolling init speed
|
|||
self.direction = self.config.direction // rolling init direction
|
|||
self.keep = self.config.keep // whether to keep rolling after mouse out area
|
|||
self.paused = false // keep state to pause the animation
|
|||
|
|||
// create element
|
|||
self._createElment() |
|||
// init
|
|||
self._init() |
|||
// set elements and instances
|
|||
TagCloud.list.push({ el: self.$el, container, instance: self }) |
|||
} |
|||
sineCosine(0, 0, 0) |
|||
positionAll(); |
|||
(function() { |
|||
update() |
|||
setTimeout(arguments.callee, 40) |
|||
})() |
|||
} |
|||
function update() { |
|||
var a; var b; var c = 0 |
|||
a = (Math.min(Math.max(-mouseY, -size), size) / radius) * tspeed |
|||
b = (-Math.min(Math.max(-mouseX, -size), size) / radius) * tspeed |
|||
lasta = a |
|||
lastb = b |
|||
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) { |
|||
return |
|||
|
|||
/* static method */ |
|||
// all TagCloud list
|
|||
static list = []; |
|||
|
|||
// default config
|
|||
static _defaultConfig = { |
|||
radius: 100, // rolling radius, unit `px`
|
|||
maxSpeed: 'normal', // rolling max speed, optional: `slow`, `normal`(default), `fast`
|
|||
initSpeed: 'normal', // rolling init speed, optional: `slow`, `normal`(default), `fast`
|
|||
direction: 135, // rolling init direction, unit clockwise `deg`, optional: `0`(top) , `90`(left), `135`(right-bottom)(default)...
|
|||
keep: true, // whether to keep rolling after mouse out area, optional: `false`, `true`(default)(decelerate to rolling init speed, and keep rolling with mouse)
|
|||
reverseDirection: false, |
|||
useContainerInlineStyles: true, |
|||
useItemInlineStyles: true, |
|||
containerClass: 'tagcloud', |
|||
itemClass: 'tagcloud--item', |
|||
useHTML: false |
|||
}; |
|||
|
|||
// speed value
|
|||
static _getMaxSpeed = (name) => ({ slow: 0.5, normal: 1, fast: 2 })[name] || 1; |
|||
|
|||
static _getInitSpeed = (name) => ({ slow: 16, normal: 32, fast: 80 })[name] || 32; |
|||
|
|||
// event listener
|
|||
static _on(el, ev, handler, cap) { |
|||
if (el.addEventListener) { |
|||
el.addEventListener(ev, handler, cap) |
|||
} else if (el.attachEvent) { |
|||
el.attachEvent(`on${ev}`, handler) |
|||
} else { |
|||
el[`on${ev}`] = handler |
|||
} |
|||
} |
|||
sineCosine(a, b, c) |
|||
for (var i = 0; i < mcList.length; i++) { |
|||
if (mcList[i].on) { |
|||
continue |
|||
|
|||
/* instance property method */ |
|||
// create elment
|
|||
_createElment() { |
|||
const self = this |
|||
|
|||
// create container
|
|||
const $el = document.createElement('div') |
|||
$el.className = self.config.containerClass |
|||
if (self.config.useContainerInlineStyles) { |
|||
$el.style.position = 'relative' |
|||
$el.style.width = `${2 * self.radius}px` |
|||
$el.style.height = `${2 * self.radius}px` |
|||
} |
|||
var rx1 = mcList[i].cx |
|||
var ry1 = mcList[i].cy * ca + mcList[i].cz * (-sa) |
|||
var rz1 = mcList[i].cy * sa + mcList[i].cz * ca |
|||
|
|||
var rx2 = rx1 * cb + rz1 * sb |
|||
var ry2 = ry1 |
|||
var rz2 = rx1 * (-sb) + rz1 * cb |
|||
|
|||
var rx3 = rx2 * cc + ry2 * (-sc) |
|||
var ry3 = rx2 * sc + ry2 * cc |
|||
var rz3 = rz2 |
|||
|
|||
mcList[i].cx = rx3 |
|||
mcList[i].cy = ry3 |
|||
mcList[i].cz = rz3 |
|||
|
|||
per = d / (d + rz3) |
|||
|
|||
mcList[i].x = (howElliptical * rx3 * per) - (howElliptical * 2) |
|||
mcList[i].y = ry3 * per |
|||
mcList[i].scale = per |
|||
var alpha = per |
|||
alpha = (alpha - 0.6) * (10 / 6) |
|||
mcList[i].alpha = alpha * alpha * alpha - 0.2 |
|||
mcList[i].zIndex = Math.ceil(100 - Math.floor(mcList[i].cz)) |
|||
|
|||
// create texts
|
|||
self.items = [] |
|||
self.texts.forEach((text, index) => { |
|||
const item = self._createTextItem(text, index) |
|||
$el.appendChild(item.el) |
|||
self.items.push(item) |
|||
}) |
|||
self.$container.appendChild($el) |
|||
self.$el = $el |
|||
} |
|||
doPosition() |
|||
} |
|||
function positionAll() { |
|||
var phi = 0 |
|||
var theta = 0 |
|||
var max = mcList.length |
|||
for (var i = 0; i < max; i++) { |
|||
if (distr) { |
|||
phi = Math.acos(-1 + (2 * (i + 1) - 1) / max) |
|||
theta = Math.sqrt(max * Math.PI) * phi |
|||
|
|||
// create a text
|
|||
_createTextItem(text, index = 0) { |
|||
const self = this |
|||
const itemEl = document.createElement('span') |
|||
itemEl.className = self.config.itemClass |
|||
if (self.config.useItemInlineStyles) { |
|||
itemEl.style.willChange = 'transform, opacity, filter' |
|||
itemEl.style.position = 'absolute' |
|||
itemEl.style.top = '50%' |
|||
itemEl.style.left = '50%' |
|||
itemEl.style.zIndex = index + 1 |
|||
itemEl.style.filter = 'alpha(opacity=0)' |
|||
itemEl.style.opacity = 0 |
|||
const transformOrigin = '50% 50%' |
|||
itemEl.style.WebkitTransformOrigin = transformOrigin |
|||
itemEl.style.MozTransformOrigin = transformOrigin |
|||
itemEl.style.OTransformOrigin = transformOrigin |
|||
itemEl.style.transformOrigin = transformOrigin |
|||
const transform = 'translate3d(-50%, -50%, 0) scale(1)' |
|||
itemEl.style.WebkitTransform = transform |
|||
itemEl.style.MozTransform = transform |
|||
itemEl.style.OTransform = transform |
|||
itemEl.style.transform = transform |
|||
} |
|||
if (self.config.useHTML) { |
|||
itemEl.innerHTML = text |
|||
} else { |
|||
phi = Math.random() * (Math.PI) |
|||
theta = Math.random() * (2 * Math.PI) |
|||
itemEl.innerText = text |
|||
} |
|||
// 坐标变换
|
|||
mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi) |
|||
mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi) |
|||
mcList[i].cz = radius * Math.cos(phi) |
|||
return { |
|||
el: itemEl, |
|||
...self._computePosition(index) // distributed in appropriate place
|
|||
} |
|||
} |
|||
|
|||
aA[i].style.left = mcList[i].cx + oDiv.offsetWidth / 2 - mcList[i].offsetWidth / 2 + 'px' |
|||
aA[i].style.top = mcList[i].cy + oDiv.offsetHeight / 2 - mcList[i].offsetHeight / 2 + 'px' |
|||
// calculate appropriate place
|
|||
_computePosition(index, random = false) { |
|||
const self = this |
|||
const textsLength = self.texts.length |
|||
// if random `true`, It means that a random appropriate place is generated, and the position will be independent of `index`
|
|||
if (random) index = Math.floor(Math.random() * (textsLength + 1)) |
|||
const phi = Math.acos(-1 + (2 * index + 1) / textsLength) |
|||
const theta = Math.sqrt((textsLength + 1) * Math.PI) * phi |
|||
return { |
|||
x: (self.size * Math.cos(theta) * Math.sin(phi)) / 2, |
|||
y: (self.size * Math.sin(theta) * Math.sin(phi)) / 2, |
|||
z: (self.size * Math.cos(phi)) / 2 |
|||
} |
|||
} |
|||
} |
|||
function doPosition() { |
|||
var l = oDiv.offsetWidth / 2 |
|||
var t = oDiv.offsetHeight / 2 |
|||
for (var i = 0; i < mcList.length; i++) { |
|||
if (mcList[i].on) { |
|||
continue |
|||
|
|||
_requestInterval(fn, delay) { |
|||
const requestAnimFrame = ((() => window.requestAnimationFrame) || ((callback, element) => { |
|||
window.setTimeout(callback, 1000 / 60) |
|||
}))() |
|||
let start = new Date().getTime() |
|||
const handle = {} |
|||
function loop() { |
|||
handle.value = requestAnimFrame(loop) |
|||
const current = new Date().getTime() |
|||
const delta = current - start |
|||
if (delta >= delay) { |
|||
fn.call() |
|||
start = new Date().getTime() |
|||
} |
|||
} |
|||
var aAs = aA[i].style |
|||
if (mcList[i].alpha > 0.1) { |
|||
if (aAs.display !== '') { aAs.display = '' } |
|||
} else { |
|||
if (aAs.display !== 'none') { aAs.display = 'none' } |
|||
continue |
|||
handle.value = requestAnimFrame(loop) |
|||
return handle |
|||
} |
|||
|
|||
// init
|
|||
_init() { |
|||
const self = this |
|||
|
|||
self.active = false // whether the mouse is activated
|
|||
|
|||
self.mouseX0 = self.initSpeed * Math.sin(self.direction * (Math.PI / 180)) // init distance between the mouse and rolling center x axis
|
|||
self.mouseY0 = -self.initSpeed * Math.cos(self.direction * (Math.PI / 180)) // init distance between the mouse and rolling center y axis
|
|||
|
|||
self.mouseX = self.mouseX0 // current distance between the mouse and rolling center x axis
|
|||
self.mouseY = self.mouseY0 // current distance between the mouse and rolling center y axis
|
|||
|
|||
const isTouchDevice = window.matchMedia('(hover: hover)') |
|||
if (!isTouchDevice || isTouchDevice.matches) { |
|||
// mouseover
|
|||
TagCloud._on(self.$el, 'mouseover', () => { self.active = true }) |
|||
// mouseout
|
|||
TagCloud._on(self.$el, 'mouseout', () => { self.active = false }) |
|||
// mousemove
|
|||
TagCloud._on(self.keep ? window : self.$el, 'mousemove', (ev) => { |
|||
ev = ev || window.event |
|||
const rect = self.$el.getBoundingClientRect() |
|||
self.mouseX = (ev.clientX - (rect.left + rect.width / 2)) / 5 |
|||
self.mouseY = (ev.clientY - (rect.top + rect.height / 2)) / 5 |
|||
}) |
|||
} |
|||
aAs.left = mcList[i].cx + l - mcList[i].offsetWidth / 2 + 'px' |
|||
aAs.top = mcList[i].cy + t - mcList[i].offsetHeight / 2 + 'px' |
|||
// aAs.fontSize=Math.ceil(12*mcList[i].scale/2)+8+'px';
|
|||
// aAs.filter="progid:DXImageTransform.Microsoft.Alpha(opacity="+100*mcList[i].alpha+")";
|
|||
aAs.filter = 'alpha(opacity=' + 100 * mcList[i].alpha + ')' |
|||
aAs.zIndex = mcList[i].zIndex |
|||
aAs.opacity = mcList[i].alpha |
|||
|
|||
// update state regularly
|
|||
self._next() // init update state
|
|||
self.interval = self._requestInterval(() => { |
|||
self._next.call(self) |
|||
}, 10) |
|||
} |
|||
|
|||
// calculate the next state
|
|||
_next() { |
|||
const self = this |
|||
|
|||
if (self.paused) { |
|||
return |
|||
} |
|||
|
|||
// if keep `false`, pause rolling after moving mouse out area
|
|||
if (!self.keep && !self.active) { |
|||
self.mouseX = Math.abs(self.mouseX - self.mouseX0) < 1 |
|||
? self.mouseX0 : (self.mouseX + self.mouseX0) / 2 // reset distance between the mouse and rolling center x axis
|
|||
self.mouseY = Math.abs(self.mouseY - self.mouseY0) < 1 |
|||
? self.mouseY0 : (self.mouseY + self.mouseY0) / 2 // reset distance between the mouse and rolling center y axis
|
|||
} |
|||
|
|||
let a = -(Math.min(Math.max(-self.mouseY, -self.size), self.size) / self.radius) * |
|||
self.maxSpeed |
|||
let b = (Math.min(Math.max(-self.mouseX, -self.size), self.size) / self.radius) * |
|||
self.maxSpeed |
|||
|
|||
// inverse direction if enabled
|
|||
if (self.config.reverseDirection) { |
|||
a = -a |
|||
b = -b |
|||
} |
|||
|
|||
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) return // pause
|
|||
|
|||
// calculate offset
|
|||
const l = Math.PI / 180 |
|||
const sc = [ |
|||
Math.sin(a * l), |
|||
Math.cos(a * l), |
|||
Math.sin(b * l), |
|||
Math.cos(b * l) |
|||
] |
|||
|
|||
self.items.forEach(item => { |
|||
const rx1 = item.x |
|||
const ry1 = item.y * sc[1] + item.z * (-sc[0]) |
|||
const rz1 = item.y * sc[0] + item.z * sc[1] |
|||
|
|||
const rx2 = rx1 * sc[3] + rz1 * sc[2] |
|||
const ry2 = ry1 |
|||
const rz2 = rz1 * sc[3] - rx1 * sc[2] |
|||
|
|||
const per = (2 * self.depth) / (2 * self.depth + rz2) // todo
|
|||
|
|||
item.x = rx2 |
|||
item.y = ry2 |
|||
item.z = rz2 |
|||
item.scale = per.toFixed(3) |
|||
let alpha = per * per - 0.25 |
|||
alpha = (alpha > 1 ? 1 : alpha).toFixed(3) |
|||
|
|||
const itemEl = item.el |
|||
const left = (item.x - itemEl.offsetWidth / 2).toFixed(2) |
|||
const top = (item.y - itemEl.offsetHeight / 2).toFixed(2) |
|||
const transform = `translate3d(${left}px, ${top}px, 0) scale(${item.scale})` |
|||
itemEl.style.WebkitTransform = transform |
|||
itemEl.style.MozTransform = transform |
|||
itemEl.style.OTransform = transform |
|||
itemEl.style.transform = transform |
|||
itemEl.style.filter = `alpha(opacity=${100 * alpha})` |
|||
itemEl.style.opacity = alpha |
|||
}) |
|||
} |
|||
|
|||
/* export instance properties and methods */ |
|||
// update
|
|||
update(texts) { |
|||
const self = this |
|||
// params
|
|||
self.texts = texts || [] |
|||
// judging and processing items based on texts
|
|||
self.texts.forEach((text, index) => { |
|||
let item = self.items[index] |
|||
if (!item) { // if not had, then create
|
|||
item = self._createTextItem(text, index) |
|||
Object.assign(item, self._computePosition(index, true)) // random place
|
|||
self.$el.appendChild(item.el) |
|||
self.items.push(item) |
|||
} |
|||
// if had, replace text
|
|||
if (self.config.useHTML) { |
|||
item.el.innerHTML = text |
|||
} else { |
|||
item.el.innerText = text |
|||
} |
|||
}) |
|||
// remove redundant self.items
|
|||
const textsLength = self.texts.length |
|||
const itemsLength = self.items.length |
|||
if (textsLength < itemsLength) { |
|||
const removeList = self.items.splice(textsLength, itemsLength - textsLength) |
|||
removeList.forEach(item => { |
|||
self.$el.removeChild(item.el) |
|||
}) |
|||
} |
|||
} |
|||
|
|||
// destroy
|
|||
destroy() { |
|||
const self = this |
|||
self.interval = null |
|||
// clear in TagCloud.list
|
|||
const index = TagCloud.list.findIndex(e => e.el === self.$el) |
|||
if (index !== -1) TagCloud.list.splice(index, 1) |
|||
// clear element
|
|||
if (self.$container && self.$el) { |
|||
self.$container.removeChild(self.$el) |
|||
} |
|||
} |
|||
|
|||
pause() { |
|||
const self = this |
|||
|
|||
self.paused = true |
|||
} |
|||
|
|||
resume() { |
|||
const self = this |
|||
|
|||
self.paused = false |
|||
} |
|||
} |
|||
function sineCosine(a, b, c) { |
|||
sa = Math.sin(a * dtr) |
|||
ca = Math.cos(a * dtr) |
|||
sb = Math.sin(b * dtr) |
|||
cb = Math.cos(b * dtr) |
|||
sc = Math.sin(c * dtr) |
|||
cc = Math.cos(c * dtr) |
|||
} |
|||
|
|||
export default (els, texts, options) => { |
|||
if (typeof els === 'string') els = document.querySelectorAll(els) |
|||
if (!els.forEach) els = [els] |
|||
const instances = [] |
|||
els.forEach(el => { |
|||
if (el) { |
|||
instances.push(new TagCloud(el, texts, options)) |
|||
} |
|||
}) |
|||
return instances.length <= 1 ? instances[0] : instances |
|||
} |
|||
@ -1,648 +0,0 @@ |
|||
[ |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea185d9ba0022", |
|||
"libcode": "1201", |
|||
"nbName": "海错图笔记", |
|||
"nbExplain": "这本书是一套多元解读清代海洋生物图谱《海错图》的科普书,以博物达人的视角,从生物学,博物学及生活美学等角度,讲述中国丰富的海洋及滨海生物,植物和风土人情。孩子读了这本书,可谓是一次酣畅痛快的海洋及滨海生物物种解密,更是一次精彩的古今博物达人思维碰撞。", |
|||
"createTime": "2024-04-03T01:14:47.610+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:14:47.610+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "张辰亮著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "Q178.53/12", |
|||
"isbn": "978-7-5217-2277-2", |
|||
"nbPublisher": " 中信出版集团股份有限公司", |
|||
"nbPublisherdate": "2020", |
|||
"nbRecno": "12" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c231b555f18ae", |
|||
"libcode": "1201", |
|||
"nbName": "费曼经典", |
|||
"nbExplain": "本书是著名物理学家理查德·费曼最负盛名的自述回忆录合集, 这些文章大致按时间顺序分为8个部分, 展现费曼的精彩一生: 从法洛克威小镇的好奇少年到麻省理工新生, 在普林斯顿大学那些年, 与爱妻阿琳的恋情, 与曼哈顿计划和原子弹, 任教康奈尔大学和加州理工学院, 到巴西感受拉美风情, 到华盛顿调查航天飞机事故……费曼以坦率的口吻讲述了他的所有冒险。作为费曼的好友, 编者拉尔夫·莱顿为本书增加了注释, 这些着意补充的细节为费曼的叙述增添了别样的色彩; 同时收录包括费曼的照片、绘画作品、手稿在内的的30多张图片。此外, 本书还特别收录著名物理学家、数学家弗里曼·戴森所作的前言, 并以知名演员、导演艾伦·艾尔达在加州理工学院毕业庆典上的演讲作为后记, 为这本精彩的自述辅以他人视角, 更能让读者看见一个完整的、活生生的费曼。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:13:22.543+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": " (美) 理查德·P. 费曼著 , (美) 拉尔夫·莱顿编", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K837.126.11/4", |
|||
"isbn": "978-7-5596-6127-2", |
|||
"nbPublisher": " 北京联合出版公司", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "69" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c23197f6f18ad", |
|||
"libcode": "1201", |
|||
"nbName": "杰克之书", |
|||
"nbExplain": "本书讲述了杰克·凯鲁亚克的故事,全书共分六章,内容包括:小镇、城市、路、重访城市、大瑟尔、阴郁的书式电影。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:13:14.273+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(美)巴里·吉福德(Barry, Gifford),(美)劳伦斯·李(Lawrence, Lee)著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K837.125/33", |
|||
"isbn": "978-7-305-25073-6", |
|||
"nbPublisher": "南京大学出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "70" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c231858d818ac", |
|||
"libcode": "1201", |
|||
"nbName": "一百年, 许多人, 许多事 ", |
|||
"nbExplain": "本书内容包括: 家族旧事、中西十年、从联大到中大 (上下) 四章。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:13:05.490+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "杨苡口述 , 余斌撰写", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K825.6/332", |
|||
"isbn": "978-7-5447-9274-5 ", |
|||
"nbPublisher": "译林出版社", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "71" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2316895518ab", |
|||
"libcode": "1201", |
|||
"nbName": "漫威先生", |
|||
"nbExplain": "本书从斯坦李在罗马尼亚的家族讲起,一直延伸到他在洛杉矶的临终时刻。本书既忠实地记录了斯坦·李戏剧性的成功,也记录了他人生中悲剧性的失败。本书作者亚伯拉罕·里斯曼进行了150多次采访,查阅了数千页私人文件,发掘出斯坦·李从未公开过的工作和生活信息。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:56.080+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(美)亚伯拉罕·里斯曼(Abraham Riesman)著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K837.125.78=6/5", |
|||
"isbn": "978-7-5001-6919-2", |
|||
"nbPublisher": " 中译出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "72" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2315547818aa", |
|||
"libcode": "1201", |
|||
"nbName": "如何屠龙", |
|||
"nbExplain": "本书内容: 出生在小村庄的你突然被选中去屠龙, 这让你不知所措? 别担心, 这本“传说级”秘籍会手把手教你通关真实的中世纪! 你需要选择适合战斗的装备、学点儿防身的技巧, 再找到一位适合你的导师。你得学会在冒险途中解决自己的食宿问题, 但还得时刻提防狡猾的骗子和凶狠的强盗。你可以在酒馆里和看不惯的家伙打一架, 但记得别和迷人的酒馆女招待走得太近。你必须在漫长的寒冬中活下来, 但也要在火灾发生时伸出援手。你应该看得懂敌军来袭时烽火台上的信号, 也该清楚凯旋后如何招待来为你庆贺的热情宾客。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:48.097+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "史蒂文森", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K109/179", |
|||
"isbn": "978-7-5596-6868-4", |
|||
"nbPublisher": " 北京联合出版公司", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "73" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c23121a1b18a9", |
|||
"libcode": "1201", |
|||
"nbName": "我的艺术生活", |
|||
"nbExplain": "本书内容包括“艺术的童年时代”、“艺术的青少年时代”、“艺术的成年时期”三个部分,记述了作者从童年到成年所经历的生活和艺术的发展历程。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:39.867+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(苏联)斯坦尼斯拉夫斯基著 , 瞿白音译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K835.12/40", |
|||
"isbn": "978-7-5327-9119-4", |
|||
"nbPublisher": "上海译文出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "74" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2310292f18a8", |
|||
"libcode": "1201", |
|||
"nbName": "稻盛和夫如是说", |
|||
"nbExplain": "本书收录了整整半个世纪内,即从20世纪70年代开始至21世纪10年代为止,对稻盛合夫先生的采访,以及他的独白记述。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:30.210+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(日)稻盛和夫口述 , 曹岫云,张凯译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K833.13/28", |
|||
"isbn": "978-7-111-70571-0", |
|||
"nbPublisher": "机械工业出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "75" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c230de31218a7", |
|||
"libcode": "1201", |
|||
"nbName": "布匿战争", |
|||
"nbExplain": "公元前3世纪, 罗马和迦太基展开了对两国之间的战略要地--西西里岛的争夺, 布匿战争的序幕由此拉开。在接下来的百余年里, 双方把战场扩大到了非洲、西班牙、意大利, 展开了改变古代地中海地区政治格局的三场宏大战争。许多军事史的经典篇章在此期间诞生--从汉尼拔率领十万大军翻越阿尔卑斯山、通过坎尼一役把罗马推到毁灭的边缘, 再到西庇阿在扎马之战大挫汉尼拔……布匿战争最后以迦太基屹立了三百多年的帝国在公元前146年的覆灭告终。布匿战争是西方历史的转折点, 如果罗马战败, 那么罗马帝国在接下来的两千年里对欧洲乃至整个世界造成的政治、语言、法律等方面的影响可能会小得多, 甚至罗马帝国可能根本不会出现。《布匿战争》兼具可读性和学术严谨性, 生动地呈现了这场战争, 也讨论了它深远的影响。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:22.193+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(英) 阿德里安·戈兹沃西著 , 李小迟译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K126/31", |
|||
"isbn": "978-7-5570-2623-3 ", |
|||
"nbPublisher": " 广东旅游出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "76" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c230b113118a6", |
|||
"libcode": "1201", |
|||
"nbName": "好手艺", |
|||
"nbExplain": "\t本书集合了多部清朝时期中国广州一带画师所绘的外销画册,结合大量传世文献收录、介绍了农耕、造纸、制茶及贸易、纺织、制漆、瓷器制造及贸易、玻璃制作等与生活息息相关,且富有中国特色的传统手工艺制作流程,展示了当时中国社会生活与匠人精神,从侧面探寻了这股奔涌的“中国潮”,在文化生活与哲学思想方面,是如何影响席卷西方世界的。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:14.153+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "侯印国著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "J52/4", |
|||
"isbn": "978-7-5168-3295-0 ", |
|||
"nbPublisher": " 台海出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "77" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2309c9fb18a5", |
|||
"libcode": "1201", |
|||
"nbName": "最后的礼物", |
|||
"nbExplain": "本书延续了移民主题, 但与前几部小说不同的是, 它聚焦于移民经历对移民自己及其后代的影响。主人公是63岁的非洲裔英国工程师阿巴斯, 43年前, 他从桑给巴尔来到英国, 认识了混血妻子马莉亚姆。多年来, 阿巴斯对自己到英国前的经历一直守口如瓶。小说开场时, 阿巴斯因糖尿病引发中风, 担心自己不久于人世, 把自己的秘密作为“最后的礼物”以碎片式的回忆方式告诉了家人。作为在英国长大的移民后代, 儿子贾马尔因自己的肤色难以被英国社会完全接受, 找不到归属感; 女儿汉娜 (Hanna) 把自己的名字改为安娜 (Anna), 在各方面努力把自己改造成一个英国人, 但其白人男友尼克的家人和亲友依然自恃种族优越, 对其冷嘲热讽, 羞辱责难。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:12:06.730+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(英) 阿卜杜勒拉扎克·古尔纳著 , 宋佥译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I561.45/970", |
|||
"isbn": "978-7-5327-9088-3 ", |
|||
"nbPublisher": "上海译文出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "78" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2308c09218a4", |
|||
"libcode": "1201", |
|||
"nbName": "里山异兽谭", |
|||
"nbExplain": "本书是与《远野物语》齐名的日本民俗文学经典, 为日本民俗学家、画家早川孝太郎的经典作品。最早出版于一九二六年, 收录了日本三河、横山等地区的老猎人等所讲述山野中出没的野兽的故事, 主要以野猪, 鹿和狸猫的轶事为主, 既有猎人山民的口头故事, 比如猎人射杀了超过90贯重的大野猪的故事、母鹿被杀死后跟来的小鹿的故事、在村庄发生的可疑事件怀疑是狸猫的恶作剧……又有流传甚广的民间传说, 诸如净琉璃姬与鹿、狸猫所变的文釜茶壶等, 还有民俗掌故等组成的独特的传统世界, 以取自日常生活的鲜活表达加上作者精心的文字加工而形成的民俗学经典作品, 文体简洁, 内容醇厚, 长期以来受到众多作家和文学爱好者的喜爱, 周作人、 芥川龙之介、柳田国男等人都对其有高度评价。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:59.067+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": " (日) 早川孝太郎著 , 熊韵译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I313.45/1207", |
|||
"isbn": "978-7-5327-9043-2", |
|||
"nbPublisher": " 上海译文出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "79" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2307b15218a3", |
|||
"libcode": "1201", |
|||
"nbName": "雏菊人生", |
|||
"nbExplain": "中篇小说 日本 现代", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:50.320+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(日)吉本芭娜娜著 , (日)奈良美智绘", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I313.45/1206", |
|||
"isbn": "978-7-5327-9157-6 ", |
|||
"nbPublisher": "上海译文出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "80" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c23060fc018a2", |
|||
"libcode": "1201", |
|||
"nbName": "像绅士淑女一样服务", |
|||
"nbExplain": "本书作者分享了丽思卡尔顿赖以生存的管理秘诀, 讲述了他在对待客户服务、员工激励和领导力构建三个方面的思考与智慧。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:41.960+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(美) 霍斯特·舒尔茨, 迪恩·梅里尔著 , 鲁仕齐译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "F274/145", |
|||
"isbn": "978-7-111-70377-8", |
|||
"nbPublisher": "机械工业出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "81" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c2304ed0118a1", |
|||
"libcode": "1201", |
|||
"nbName": "非自然死亡", |
|||
"nbExplain": "本书记录了作者理查德·谢泼德执业至今所经手的国际要案,从“9·11”事件、巴厘岛爆炸案、伦敦七七爆炸案,到亨格福德连环杀人案、戴安娜王妃车祸案等,讲述了案件背后不为人知的关键细节。书中还呈现了一些颇受争议的案件的始末,例如杀婴、种族主义谋杀、伪装成正当防卫的谋杀等。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:34.073+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(英)理查德·谢泼德(Richard Shepherd)著 , 李立丰译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "D919.1/3", |
|||
"isbn": "978-7-5447-8927-1", |
|||
"nbPublisher": " 译林出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "82" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018b743e352d1837", |
|||
"libcode": "1201", |
|||
"nbName": "博物馆奇妙夜", |
|||
"nbExplain": "今天是梅森的生日,梅森选择在他喜欢的地方——博物馆,举办生日party……", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:17.807+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(美)卡伦·勒弗拉克著", |
|||
"nbBooktype": "少儿图书", |
|||
"sortmark": "I712.85/717", |
|||
"isbn": " 978-7-5143-7459-9", |
|||
"nbPublisher": " 现代出版社", |
|||
"nbPublisherdate": "2020", |
|||
"nbRecno": "84" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018b743bb92b1836", |
|||
"libcode": "1201", |
|||
"nbName": "特殊的任务", |
|||
"nbExplain": "特种兵学校的地理课告一段落了,因为猛虎小队和飞禽小队的队员们要和两位教官一起去热带雨林中执行一项重要的保密任务。这项保密任务队员们打探了一路也没能从教官们的口中得知。但是在任务执行过程中他们却学到了很多新的地理知识,而且这些地理知识还帮了他们大忙。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:09.993+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "八路,张博涵著", |
|||
"nbBooktype": "少儿图书", |
|||
"sortmark": "I287.47/418", |
|||
"isbn": "978-7-5595-4587-9", |
|||
"nbPublisher": "河北少年儿童出版社", |
|||
"nbPublisherdate": "2021", |
|||
"nbRecno": "85" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018b7435497c1834", |
|||
"libcode": "1201", |
|||
"nbName": "偷偷藏不住", |
|||
"nbExplain": "七年前,也有这么一天。她穿着干净的裙子,站在穿着学士服的段嘉许旁边,因为再次见到他而感到开心,又因为即将的离别而觉得难过至极。她笨拙地藏着自己的心思,不敢让任何人发现,无论是她多亲密的人。她想象着,未来有一天一定要到他的身边去。那个时候的桑稚一定没有想过,七年后,她所想象的这么一天真的到来了。如她所愿。桑稚真的成了段嘉许身边的那个人。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:11:01.777+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "竹已著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I247.57/6312:2", |
|||
"isbn": "978-7-5552-8529-8", |
|||
"nbPublisher": "青岛出版社", |
|||
"nbPublisherdate": "2020", |
|||
"nbRecno": "86" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018b743074351833", |
|||
"libcode": "1201", |
|||
"nbName": "妈妈的勇气:引导孩子找到自己", |
|||
"nbExplain": "本书是剑桥妈妈&职业女性精英大赛冠军刘红燕写给中国父母的0-18岁系统养育指南。作者手把手教你破解二宝、早教、择校、写作业、亲子沟通、金钱教育、艺术教育、性教育、留学等0-18岁孩子的养育难题, 学完就能解决。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:10:49.990+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "刘红燕著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "G782/243", |
|||
"isbn": "978-7-5713-1430-9", |
|||
"nbPublisher": "江苏凤凰科学技术出版社", |
|||
"nbPublisherdate": "2021", |
|||
"nbRecno": "87" |
|||
}, |
|||
{ |
|||
"nbId": "2c908097837879e801837890167c0001", |
|||
"libcode": "1201", |
|||
"nbName": "2020中国年度散文诗精选", |
|||
"nbExplain": "", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:10:07.787+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "龚学敏 、 周庆荣", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I", |
|||
"isbn": "9787546428024", |
|||
"nbPublisher": "成都时代出版社", |
|||
"nbPublisherdate": "2021", |
|||
"nbRecno": "91" |
|||
}, |
|||
{ |
|||
"nbId": "2c908097837879e801837891699a0002", |
|||
"libcode": "1201", |
|||
"nbName": "宇宙之谜", |
|||
"nbExplain": "", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:09:59.337+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(德)恩斯特·海克尔", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "G", |
|||
"isbn": "9787301313992", |
|||
"nbPublisher": "北京大学出版社", |
|||
"nbPublisherdate": "2020", |
|||
"nbRecno": "92" |
|||
}, |
|||
{ |
|||
"nbId": "2c908097837879e8018378922bb60003", |
|||
"libcode": "1201", |
|||
"nbName": "让科学发声--首都科学讲堂2020年集萃", |
|||
"nbExplain": "", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:09:40.317+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "马林", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "P", |
|||
"isbn": "9787113283797", |
|||
"nbPublisher": "中国铁道出版社 ", |
|||
"nbPublisherdate": "2021", |
|||
"nbRecno": "93" |
|||
}, |
|||
{ |
|||
"nbId": "2c908097837879e8018378931a270004", |
|||
"libcode": "1201", |
|||
"nbName": "习近平在福州[专著]", |
|||
"nbExplain": "", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:09:26.873+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "中央党校采访实录编辑室著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "94", |
|||
"isbn": "9787503568404", |
|||
"nbPublisher": "中共中央党校出版社 ", |
|||
"nbPublisherdate": "2020", |
|||
"nbRecno": "0" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978c433d11018d2afeaa9a2358", |
|||
"libcode": "1201", |
|||
"nbName": "读书与藏书", |
|||
"nbExplain": "\t本书收录作者探访27为文化名家书房,听书房主人畅叙个人阅读经历,阐说读书观与藏书观的访谈录。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:09:04.050+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "绿茶", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K825.41=76/5", |
|||
"isbn": "978-7-5596-6736-6", |
|||
"nbPublisher": "北京联合出版公司", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "95" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978c433d11018d2b02cc58235a", |
|||
"libcode": "1201", |
|||
"nbName": "白鹭在冰面上站着", |
|||
"nbExplain": "无论被叫作香格里拉,还是勐巴拉西,云南都是“人间天堂”的意思。在著名作家、鲁迅文学奖得主雷平阳眼里,云南是他的文学诞生地,是他生活的现场,更是他的桃花源和乌有乡。这本散文集即为他的“桃花源记”。澜沧江、怒江、金沙江、牛栏江,乌蒙山、哀牢山、基诺山、南糯山,山水相依;天空、丛林、废墟,寺庙、悬崖、墓地,人神鬼巫,共生共荣,死生无迹。云南的山川物候、历史文脉、民生世情转化为其阔大的写作景深,接通了雷平阳的无际视域。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:08:55.253+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "雷平阳著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I267/5253", |
|||
"isbn": "978-7-5447-9732-0", |
|||
"nbPublisher": "译林出版社", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "96" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978c433d11018d2b0180d72359", |
|||
"libcode": "1201", |
|||
"nbName": "追赶你老去的速度", |
|||
"nbExplain": "本书是荷尔德林1785-1826年间,与亲人的通信,包括他和母亲、弟弟妹妹的通信。书信内容较为全面地反映了诗人与亲人交流的方式,生活的变故等。原文思想深邃,文学性强,译文准确、洗练。书信内容从一个侧面反映了诗人与亲人交流的真实状态,也反映了当时德国的社会风貌,是研究德国历史、文化,以及诗人创作成就不可多得的一手资料。书稿兼具学术性、艺术性和史料价值。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:08:45.640+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(德)荷尔德林著 , 王佐良译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K835.165/11", |
|||
"isbn": "978-7-205-10415-3", |
|||
"nbPublisher": "辽宁人民出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "97" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978c433d11018d2afca7002357", |
|||
"libcode": "1201", |
|||
"nbName": "这个三国史很上头", |
|||
"nbExplain": "本书分军阀篇、曹魏篇、蜀汉篇、东吴篇、三分归晋篇五编,内容包括:“吕布:有多勇武,就有多不受待见”“公孙瓒:从白马将军到笼中困兽”“袁绍:小气量失大天下”等。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:08:36.740+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "张大可", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "K236/7", |
|||
"isbn": "978-7-5411-6391-3 ", |
|||
"nbPublisher": "四川文艺出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "98" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c22fdc47b189f", |
|||
"libcode": "1201", |
|||
"nbName": "阿富汗文件", |
|||
"nbExplain": "本书是对“阿富汗战争”的深度调查,揭示了美国在阿富汗战争中的谎言、欺骗与真相。美国以反恐为名发动战争,这是被净化了的官方叙事。作者获取了大量美国政府未敢公开的内部文件,在书中揭示了美国如何陷入一场劳师动众的战争,并决心对公众隐瞒失败的真相。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:08:27.763+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(美)克雷格·惠特洛克(Craig Whitlock)著 , 陈小迁,张文斗译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "D815.4/8", |
|||
"isbn": "978-7-5217-3900-8 ", |
|||
"nbPublisher": "中信出版集团股份有限公司", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "99" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978a8dea18018c22fb1575189e", |
|||
"libcode": "1201", |
|||
"nbName": "效率脑科学", |
|||
"nbExplain": "本书根据最新的脑科学研究成果,耗费数年时间写作了这本工作脑科学著作,其中的方法经过了知名企业的多次验证,切实提高了人们的工作效率。", |
|||
"createTime": null, |
|||
"creater": null, |
|||
"updateTime": "2024-04-03T01:08:18.827+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": " (美)戴维·罗克(David Rock)著 , 马梦捷译", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "C934/46", |
|||
"isbn": "978-7-115-57971-3 ", |
|||
"nbPublisher": "人民邮电出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "99" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17f94140021", |
|||
"libcode": "1201", |
|||
"nbName": "爱丽莎的眼睛", |
|||
"nbExplain": "法国圣埃克苏佩文学奖获得者蒂莫泰.德.丰拜勒的代表作,这是一部历险小说,也是一部幻想曲,更是一篇保护生态环境的宣言。它简单又神秘,平实又激动人心,故事扣人心弦。它嘲笑无知和权势,赞扬智慧与勇敢,崇尚人间真情,它将给我们带来精神上的洗礼,是一部难得可贵的心灵宝典。", |
|||
"createTime": "2024-04-03T01:07:56.563+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:07:56.563+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(法) 蒂莫泰·德·丰拜勒著", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I565.84/50", |
|||
"isbn": "978-7-5307-4994-4", |
|||
"nbPublisher": "新蕾出版社", |
|||
"nbPublisherdate": "2011", |
|||
"nbRecno": "12" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17ec74c0020", |
|||
"libcode": "1201", |
|||
"nbName": "一句顶一万句", |
|||
"nbExplain": "茅盾文学奖获奖作品", |
|||
"createTime": "2024-04-03T01:07:04.140+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:07:04.140+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "刘震云", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I247.57/6485", |
|||
"isbn": "978-7-5360-9726-1", |
|||
"nbPublisher": "花城出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "13" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17e1cf5001f", |
|||
"libcode": "1201", |
|||
"nbName": "鱼肚白点亮的记忆", |
|||
"nbExplain": "本书以时间为序, 串起作者徐淑云的人生岁月, 记下作者在追忆中的思索, 思索中的感悟, 感悟中的思想升华。本书让读者在治愈中思考, 在思考中感动, 给读者以美的享受。", |
|||
"createTime": "2024-04-03T01:06:20.533+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:06:20.533+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "徐淑云", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I267/5257", |
|||
"isbn": "978-7-203-12327-9", |
|||
"nbPublisher": "山西人民出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "13" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17acb3d001b", |
|||
"libcode": "1201", |
|||
"nbName": "哈姆雷特", |
|||
"nbExplain": "生存还是死亡,哈姆雷特的经典疑问。这本书是莎士比亚的经典,讲的是丹麦王子哈姆雷特历经艰险为父报仇的故事。读了这本书,孩子可以感受到大文豪优美的文笔并且可以体会人世间的酸甜苦辣。", |
|||
"createTime": "2024-04-03T01:02:43.003+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:02:43.003+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(英)威廉·莎士比亚著 , (英)查尔斯·兰姆,(英)玛丽·兰姆改写", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I561.33/76:1", |
|||
"isbn": "978-7-5470-6068-1", |
|||
"nbPublisher": "万卷出版有限责任公司", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "16" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea179eafe001a", |
|||
"libcode": "1201", |
|||
"nbName": "一分钟", |
|||
"nbExplain": "本书收录了著名儿童文学作家鲁兵的童话,通过主人公的经历,让孩子明白时间规划的重要性,培养孩子良好习惯的养成。", |
|||
"createTime": "2024-04-03T01:01:45.597+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:01:45.597+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": " 鲁兵著", |
|||
"nbBooktype": "绘本", |
|||
"sortmark": "I287/194:2", |
|||
"isbn": "978-7-5702-3231-4", |
|||
"nbPublisher": "长江文艺出版社", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "17" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17916cf0019", |
|||
"libcode": "1201", |
|||
"nbName": "数不清!大自然的生物多样性", |
|||
"nbExplain": "一本让孩子看见大自然奥秘的美丽图画书籍。", |
|||
"createTime": "2024-04-03T01:00:51.277+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T01:00:51.277+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "[英]尼古拉·戴维斯文", |
|||
"nbBooktype": "绘本", |
|||
"sortmark": "I561.85/527", |
|||
"isbn": "978-7-5332-9625-4", |
|||
"nbPublisher": " 明天出版社", |
|||
"nbPublisherdate": "2018", |
|||
"nbRecno": "17" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17840360018", |
|||
"libcode": "1201", |
|||
"nbName": "猜猜我有多爱你", |
|||
"nbExplain": "两只兔子短短的对话,浓缩生命中最复杂、最伟大的情感,引导孩子通过不同方式表达爱, 整个绘本充满爱和童趣。", |
|||
"createTime": "2024-04-03T00:59:56.340+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T00:59:56.340+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "(爱尔兰)山姆·麦克布雷尼著 , (英)安妮塔·婕朗图", |
|||
"nbBooktype": "绘本", |
|||
"sortmark": "I562.85/20", |
|||
"isbn": "978-7-5332-7426-9", |
|||
"nbPublisher": "明天出版社", |
|||
"nbPublisherdate": "2022", |
|||
"nbRecno": "18" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17732290017", |
|||
"libcode": "1201", |
|||
"nbName": "春雨落长河", |
|||
"nbExplain": "故事情节精彩跌宕, 描绘世事交变中奇诡的人生棋局; 凸显出鲜明细腻的人物性格, 尽显大时代背景下的人性之美与悲情; 具有着强烈的现实主义浪漫, 深厚的民国文化底蕴, 是一部构思精密、气势宏大的年代小说。", |
|||
"createTime": "2024-04-03T00:58:47.207+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T00:58:47.207+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "江天雪意", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "I247.5/5673", |
|||
"isbn": "978-7-226-05792-6", |
|||
"nbPublisher": "甘肃人民出版社", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "19" |
|||
}, |
|||
{ |
|||
"nbId": "2c9680978e7f2e4f018ea17657e20016", |
|||
"libcode": "1201", |
|||
"nbName": "沟通力成就领导力", |
|||
"nbExplain": "托马斯·戈登博士美国著名心理学家,本书把博士享誉全球的人际关系模型 (戈登沟通模式) 传授给领导者。", |
|||
"createTime": "2024-04-03T00:57:51.330+0000", |
|||
"creater": "297edff88354751d018359cd2e120000", |
|||
"updateTime": "2024-04-03T00:57:51.330+0000", |
|||
"updater": "297edff88354751d018359cd2e120000", |
|||
"nbAuthor": "托马斯·戈登", |
|||
"nbBooktype": "图书", |
|||
"sortmark": "C933.2/40", |
|||
"isbn": "978-7-5763-1840-1", |
|||
"nbPublisher": "北京理工大学出版社", |
|||
"nbPublisherdate": "2023", |
|||
"nbRecno": "20" |
|||
} |
|||
] |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue