小编Cha*_*had的帖子

Three.js - 在运行时更改材料

我有一些从Blender导出的.js文件并加载它们 THREE.JSONLoader();

我的回调:

var callback   = function( geometry ) { createMesh(geometry);
Run Code Online (Sandbox Code Playgroud)

我的装货:

loader.load( "Models/sculp.js", callback );
Run Code Online (Sandbox Code Playgroud)

我的创建方法:

function createMesh(geometry){

    inArr[id] = new THREE.Mesh( geometry, new THREE.MeshLambertMaterial( { color: 0xbbbbbb} ) );
    inArr[id].scale.set( 100, 100, 100 );
    scene.add( inArr[id] );
    id++;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想通过使用键盘更改运行时的材质(更改颜色和不透明度).

我怎样才能做到这一点?

javascript 3d webgl three.js

25
推荐指数
1
解决办法
4万
查看次数

jQuery选择器,效率

我最近一直在阅读关于不同选择器引擎的效率.我知道jQuery使用Sizzle引擎和这个博客文章关于一些jQuery的东西提到Sizzle引擎将你的选择器拆分成一个数组然后从左到右解析.

然后,从右到左,开始用正则表达式解密每个项目.这也意味着选择器的最右侧部分应尽可能具体 - 例如,id或标签名称.

我的问题是,运行指定了ID 的选择器或标签名称是否更有效:

var div = $('#someId');
//OR
var div = $('div#someId');
Run Code Online (Sandbox Code Playgroud)

由于我在div#someId表单中编写CSS,我倾向于以同样的方式做我的选择器,我是否导致Sizzle执行额外的工作(假设QuerySelectorAll不可用)?

javascript performance jquery sizzle

11
推荐指数
2
解决办法
2706
查看次数

Three.js第一人称控制

我正在玩Three.js和WebGL,并且无法按照我想要的方式获得控件.我选择尝试"滚动自己的"控件,因为Three.js的FirstPersonControls不使用指针锁.

无论如何,我从内置的FirstPersonControls中获取了大部分代码,将其转换为使用指针锁(movementX而不是pageX - offset),但是我无法平滑外观运动.

这是我的onMouseMove(originalEvent因为它是一个jquery事件使用):

onMouseMove: function(e) {
    if(!document.pointerLockElement) return;

    var moveX = e.originalEvent.movementX       ||
                    e.originalEvent.mozMovementX    ||
                    e.originalEvent.webkitMovementX ||
                    0,
        moveY = e.originalEvent.movementY       ||
                    e.originalEvent.mozMovementY    ||
                    e.originalEvent.webkitMovementY ||
                    0;

    //Update the mouse movement for coming frames
    this.mouseMovementX = moveX;
    this.mouseMovementY = moveY;
}
Run Code Online (Sandbox Code Playgroud)

而我Controls.update()(在每个动画帧上调用THREE.Clockdelta):

update: function(delta) {            
    if(this.freeze) {
        return;
    }

    //movement, works fine
    if(this.moveForward) this.camera.translateZ(-(actualMoveSpeed + this.autoSpeedFactor));
    if(this.moveBackward) this.camera.translateZ(actualMoveSpeed);

    if(this.moveLeft) this.camera.translateX(-actualMoveSpeed);
    if(this.moveRight) this.camera.translateX(actualMoveSpeed);

    /////////
    //ISSUES ARE WITH …
Run Code Online (Sandbox Code Playgroud)

javascript 3d webgl three.js

11
推荐指数
2
解决办法
2万
查看次数

Mac selenium webdriver镀铬窗口始终以一个小窗口开始

我有使用chrome和selenium 2 webdriver的问题.问题是当我使用chromedriver启动浏览器会话时,它总是在一个小于可用屏幕宽度一半大小的窗口中启动.因为我正在对屏幕大小发生变化的页面进行测试,所以我的测试失败了,因为我试图从页面顶部拖动一个元素并将其放到页面底部的元素中.我得到一个滚动错误.但如果窗口最大化,那么我不会得到这个错误.但问题是,每次chrome通过chrome驱动程序启动一个新会话时,它总是在一个小窗口中启动.我已经探索了许多不同的选项来让浏览器开始最大化:

  • 通过javascript拨打电话,使用window.resizeTo(width,height);更改窗口的大小.但是,这在后续版本的chrome(或firefox)中不起作用.
  • 使用开关启动chrome --start-maximized.这适用于Windows,但这在mac上没有任何作用.
  • 使用指定配置文件目录的开关启动chrome.这样,配置文件将定义窗口大小.--profile-directory =〜/ chromeprofile当我从命令行启动chrome时,这个工作正常,但是如果我从selenium webdriver/chromedriver这样做,它没有任何区别.
  • 当我尝试:driver.manage().window().setSize()我得到这个异常:

    INFO: Executing: [93debf43cf70ad3557442a7e1aee4620, setWindowSize {"windowHandle":"current","width":2560,"height":1440}]
    org.openqa.selenium.UnsupportedCommandException: [GET, HEAD, DELETE]
    Command duration or timeout: 16 milliseconds
    Build info: version: '2.15.0', revision: '15105', time: '2011-12-08 09:56:25'
    System info: os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.7.2', java.version: '1.6.0_29'
    Driver info: driver.version: RemoteWebDriver
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:147)
        at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:113)
        at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:424)
        at org.openqa.selenium.remote.RemoteWebDriver$RemoteWebDriverOptions$RemoteWindow.setSize(RemoteWebDriver.java:578)
        at com.domo.automation.framework.utility.WebDriverUtil.startWebDriver(WebDriverUtil.java:36)
        at com.domo.automation.tests.DomoWebDriverTestCase.setUp(DomoWebDriverTestCase.java:45)
        at junit.framework.TestCase.runBare(TestCase.java:132)
        at junit.framework.TestResult$1.protect(TestResult.java:110)
        at junit.framework.TestResult.runProtected(TestResult.java:128)
        at junit.framework.TestResult.run(TestResult.java:113) …
    Run Code Online (Sandbox Code Playgroud)

java selenium webdriver

10
推荐指数
1
解决办法
9186
查看次数

如何使用户能够有效地将indexedDB对象存储的内容保存到文件中?

我在IndexedDB中存储了大量的小对象.我想让用户能够将其中一个对象存储导出到可以"下载"的文件中.

我读过这篇博客文章.其中介绍了读取数据,JSON.stringify对数据进行编码encodeURIComponent以及将其作为href可用于下载数据的链接.像这样的东西:

var transaction = db.transaction([objectstore], "readonly");
var content = [];
var objectStore = transaction.objectStore(objectstore);

objectStore.openCursor().onsuccess = function(event) {
    var cursor = event.target.result;
    if (cursor) {
        content.push({key:cursor.key,value:cursor.value});
        cursor.continue();
    }
}; 

transaction.oncomplete = function(event) {
    var serializedData = JSON.stringify(dataToStore);
    link.attr("href",'data:Application/octet-stream,'+encodeURIComponent(serializedData));
    link.trigger("click");
};
Run Code Online (Sandbox Code Playgroud)

这很好,除了对象存储将有数百万条记录,我不觉得这将足够高性能.有没有办法更直接地允许用户将对象存储作为文件保存(以我可以通过网页再次导入的方式).


编辑从评论中的一些注释我重写了一些如何工作,以便从中获得更多的果汁.新代码类似于:

var transaction = db.transaction([objectstore], "readonly");
var objectStore = transaction.objectStore(objectstore);

objectStore.getAll().onsuccess = function(evt) {
    var url = window.URL.createObjectURL(new Blob(evt.target.results, {'type': 'application/octet-stream'}));
    link.attr('href', url);
    link.trigger('click');
};
Run Code Online (Sandbox Code Playgroud)

哪个会给我结果如下:

  • 10k记录,平均出口时间975.87ms
  • 100k记录,平均出口时间为5,850.10ms
  • 1mil记录,平均出口时间56,681.00ms …

javascript html5 indexeddb

10
推荐指数
1
解决办法
3225
查看次数

Math.floor()| 0

我经常在JavaScript中看到这个:

var val = (myvar / myothervar) | 0;
Run Code Online (Sandbox Code Playgroud)

其中,据我了解是许多快捷键地板在JavaScript中的值(如之一~~,和>> 0等).但是,我最近看了一段代码:

var val = Math.floor(myvar/ myothervar)|0;
Run Code Online (Sandbox Code Playgroud)

他们使用Math.floor()然后也做了一个按位OR 0.作者多次这样做,所以这不仅仅是他们曾经做过的错字.两者都有什么收获?

对于好奇,我指的代码可以在这里找到

javascript math

9
推荐指数
1
解决办法
2426
查看次数

通过nodejs重新连接生成进程

我正在Node.js中创建一个小型专有游戏服务器管理器; 目前它通过以下方式产生游戏child_process:

var server = spawn(cmd, args, { cwd: 'something' });
Run Code Online (Sandbox Code Playgroud)

只要经理继续运行,我就可以管理命令并按照我的意愿处理孩子.但是,请考虑我的经理崩溃或关闭的可能性.然后 ,我如何重新连接到之前生成的子进程(在管理器关闭时仍在运行)?我可以存储pidfiles尝试重新连接基于pid; 但我不知道如何获得一个child_process可以访问孩子stdio对象的对象.

我真的希望这是可以恢复的; 任何帮助表示赞赏,谢谢!


请注意:游戏服务器是专有的,一些例子是Minecraft,Source DS等.假设我无法访问服务器源.


编辑

从节点的阅读一些源代码之后child_process,它看起来,如果你在叫的选项指定属性一样stdinStream,stdoutStream或者stderrStream它应该只是打开一个套接字给它.(参见线428 - 496).那么问题是,我如何停止实际生成一个spawn,而只是根据我传递的指定pid和流来设置它的值.(因为fd是作为管道创建的,所以我应该stdinStream通过这样做fs.createWriteStream('/proc/PID/fd/0');来完成.)

javascript process stdio child-process node.js

8
推荐指数
1
解决办法
2178
查看次数

jQuery插件 - 深度选项修改

我目前正在使用一个相当深的设置变量的插件(在某些地方有3-4个级别).按照普遍接受的jQuery插件模式,我已经实现了一种简单的方法,用户可以使用以下表示法动态修改设置:

$('#element').plugin('option', 'option_name', 'new_value');
Run Code Online (Sandbox Code Playgroud)

这是与我现在使用的选项方法类似的代码.

option: function (option, value) {
    if (typeof (option) === 'string') {
        if (value === undefined) return settings[option];

        if(typeof(value) === 'object')
            $.extend(true, settings[option], value);
        else
            settings[option] = value;
    }

    return this;
}
Run Code Online (Sandbox Code Playgroud)

现在考虑我有一个像这样的设置变量:

var settings = {
    opt: false,
    another: {
        deep: true
    }
 };
Run Code Online (Sandbox Code Playgroud)

如果我想更改deep设置,我必须使用以下表示法:

$('#element').plugin('option', 'another', { deep: false });
Run Code Online (Sandbox Code Playgroud)

但是,因为在实践中我的设置​​可以是3-4级深度我觉得以下符号会更有用:

$('#element').plugin('option', 'another.deep', false);
Run Code Online (Sandbox Code Playgroud)

但是我不确定这是多么可行,也不确定如何去做.作为第一次尝试,我试图"遍历"到有问题的选项并设置它,但如果我设置我的遍历变量,它不会设置它在原始设置变量中引用的内容.

option: function (option, value) {
    if (typeof (option) === 'string') {
        if (value === undefined) return settings[option]; …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-plugins javascript-objects

6
推荐指数
1
解决办法
238
查看次数

如何用不同语言格式化日期?

我有一个Django项目,设置设置为lang'pl',在每个模板中我使用本地化的日期格式,例如:

{{ item.date|date:'D, d N H:i:s e' }}

result:
    Wt, 13 Lis 2012 22:00:00
Run Code Online (Sandbox Code Playgroud)

但是只有一个模板我必须使用lang'en'的格式:

Thu, 13 Nov 2012 22:00:00 GMT
Run Code Online (Sandbox Code Playgroud)

我怎么能做到这一点?

django django-templates

4
推荐指数
2
解决办法
5110
查看次数

随机背景图片CSS3

我正在做一个小网站,但我喜欢5​​-6张图片作为我的背景,我想每次刷新页面时都随意.这是我在style.css中得到的:

html {   
    background:  url(image/l2.jpg) no-repeat center center fixed
    -webkit-background-size: cover
    -moz-background-size: cover
    -o-background-size: cover
    background-size: cover   
}
Run Code Online (Sandbox Code Playgroud)

html css jquery background

4
推荐指数
3
解决办法
6万
查看次数